aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/mips
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/mips')
-rw-r--r--sysdeps/mips/Implies3
-rw-r--r--sysdeps/mips/Makefile85
-rw-r--r--sysdeps/mips/__longjmp.c84
-rw-r--r--sysdeps/mips/abort-instr.h6
-rw-r--r--sysdeps/mips/add_n.S121
-rw-r--r--sysdeps/mips/addmul_1.S128
-rw-r--r--sysdeps/mips/atomic-machine.h479
-rw-r--r--sysdeps/mips/backtrace.c1
-rw-r--r--sysdeps/mips/bits/dlfcn.h64
-rw-r--r--sysdeps/mips/bits/endian.h15
-rw-r--r--sysdeps/mips/bits/fenv.h93
-rw-r--r--sysdeps/mips/bits/ipctypes.h31
-rw-r--r--sysdeps/mips/bits/link.h117
-rw-r--r--sysdeps/mips/bits/long-double.h23
-rw-r--r--sysdeps/mips/bits/nan.h67
-rw-r--r--sysdeps/mips/bits/setjmp.h73
-rw-r--r--sysdeps/mips/bits/wordsize.h31
-rw-r--r--sysdeps/mips/bsd-_setjmp.S44
-rw-r--r--sysdeps/mips/bsd-setjmp.S43
-rw-r--r--sysdeps/mips/configure163
-rw-r--r--sysdeps/mips/configure.ac15
-rw-r--r--sysdeps/mips/dl-dtprocnum.h21
-rw-r--r--sysdeps/mips/dl-machine-reject-phdr.h326
-rw-r--r--sysdeps/mips/dl-machine.h936
-rw-r--r--sysdeps/mips/dl-procinfo.c63
-rw-r--r--sysdeps/mips/dl-procinfo.h60
-rw-r--r--sysdeps/mips/dl-tls.h45
-rw-r--r--sysdeps/mips/dl-trampoline.c513
-rw-r--r--sysdeps/mips/fpregdef.h23
-rw-r--r--sysdeps/mips/fpu/e_sqrt.c38
-rw-r--r--sysdeps/mips/fpu/e_sqrtf.c38
-rw-r--r--sysdeps/mips/fpu/fclrexcpt.c47
-rw-r--r--sysdeps/mips/fpu/fedisblxcpt.c40
-rw-r--r--sysdeps/mips/fpu/feenablxcpt.c40
-rw-r--r--sysdeps/mips/fpu/fegetenv.c33
-rw-r--r--sysdeps/mips/fpu/fegetexcept.c33
-rw-r--r--sysdeps/mips/fpu/fegetmode.c27
-rw-r--r--sysdeps/mips/fpu/fegetround.c35
-rw-r--r--sysdeps/mips/fpu/feholdexcpt.c41
-rw-r--r--sysdeps/mips/fpu/fenv_libc.h31
-rw-r--r--sysdeps/mips/fpu/fesetenv.c44
-rw-r--r--sysdeps/mips/fpu/fesetexcept.c32
-rw-r--r--sysdeps/mips/fpu/fesetmode.c38
-rw-r--r--sysdeps/mips/fpu/fesetround.c46
-rw-r--r--sysdeps/mips/fpu/feupdateenv.c45
-rw-r--r--sysdeps/mips/fpu/fgetexcptflg.c39
-rw-r--r--sysdeps/mips/fpu/fraiseexcpt.c48
-rw-r--r--sysdeps/mips/fpu/fsetexcptflg.c42
-rw-r--r--sysdeps/mips/fpu/ftestexcept.c33
-rw-r--r--sysdeps/mips/fpu_control.h133
-rw-r--r--sysdeps/mips/gccframe.h21
-rw-r--r--sysdeps/mips/ieee754/ieee754.h323
-rw-r--r--sysdeps/mips/ieee754/s_fma.c5
-rw-r--r--sysdeps/mips/ieee754/s_fmaf.c5
-rw-r--r--sysdeps/mips/ieee754/s_fmal.c7
-rw-r--r--sysdeps/mips/include/sys/asm.h55
-rw-r--r--sysdeps/mips/jmpbuf-unwind.h47
-rw-r--r--sysdeps/mips/ldsodefs.h149
-rw-r--r--sysdeps/mips/libc-tls.c32
-rw-r--r--sysdeps/mips/linkmap.h6
-rw-r--r--sysdeps/mips/localplt.data3
-rw-r--r--sysdeps/mips/lshift.S97
-rw-r--r--sysdeps/mips/machine-gmon.h146
-rw-r--r--sysdeps/mips/math-tests.h44
-rw-r--r--sysdeps/mips/math_private.h249
-rw-r--r--sysdeps/mips/memcpy.S868
-rw-r--r--sysdeps/mips/memset.S426
-rw-r--r--sysdeps/mips/memusage.h20
-rw-r--r--sysdeps/mips/mips32/Implies3
-rw-r--r--sysdeps/mips/mips32/Makefile3
-rw-r--r--sysdeps/mips/mips32/crti.S100
-rw-r--r--sysdeps/mips/mips32/crtn.S57
-rw-r--r--sysdeps/mips/mips32/fpu/Makefile3
-rw-r--r--sysdeps/mips/mips32/fpu/Versions5
-rw-r--r--sysdeps/mips/mips32/fpu/e_sqrt.c1
-rw-r--r--sysdeps/mips/mips32/fpu/e_sqrtf.c1
-rw-r--r--sysdeps/mips/mips32/fpu/fix-fp-int-convert-overflow.h38
-rw-r--r--sysdeps/mips/mips32/fpu/fpucw-helpers.c34
-rw-r--r--sysdeps/mips/mips32/libm-test-ulps1690
-rw-r--r--sysdeps/mips/mips32/libm-test-ulps-name1
-rw-r--r--sysdeps/mips/mips32/mips16/add_n.c1
-rw-r--r--sysdeps/mips/mips32/mips16/addmul_1.c1
-rw-r--r--sysdeps/mips/mips32/mips16/fpu/Makefile5
-rw-r--r--sysdeps/mips/mips32/mips16/lshift.c1
-rw-r--r--sysdeps/mips/mips32/mips16/mul_1.c1
-rw-r--r--sysdeps/mips/mips32/mips16/rshift.c1
-rw-r--r--sysdeps/mips/mips32/mips16/sub_n.c1
-rw-r--r--sysdeps/mips/mips32/mips16/submul_1.c1
-rw-r--r--sysdeps/mips/mips32/sfp-machine.h80
-rw-r--r--sysdeps/mips/mips64/Implies5
-rw-r--r--sysdeps/mips/mips64/Makefile3
-rw-r--r--sysdeps/mips/mips64/Versions7
-rw-r--r--sysdeps/mips/mips64/__longjmp.c95
-rw-r--r--sysdeps/mips/mips64/add_n.S125
-rw-r--r--sysdeps/mips/mips64/addmul_1.S131
-rw-r--r--sysdeps/mips/mips64/bsd-_setjmp.S47
-rw-r--r--sysdeps/mips/mips64/bsd-setjmp.S46
-rw-r--r--sysdeps/mips/mips64/e_sqrtl.c39
-rw-r--r--sysdeps/mips/mips64/gmp-mparam.h30
-rw-r--r--sysdeps/mips/mips64/libm-test-ulps2270
-rw-r--r--sysdeps/mips/mips64/libm-test-ulps-name1
-rw-r--r--sysdeps/mips/mips64/lshift.S100
-rw-r--r--sysdeps/mips/mips64/mul_1.S120
-rw-r--r--sysdeps/mips/mips64/n32/Implies5
-rw-r--r--sysdeps/mips/mips64/n32/Makefile6
-rw-r--r--sysdeps/mips/mips64/n32/_itoa.h4
-rw-r--r--sysdeps/mips/mips64/n32/crti.S100
-rw-r--r--sysdeps/mips/mips64/n32/crtn.S59
-rw-r--r--sysdeps/mips/mips64/n32/fpu/e_sqrt.c1
-rw-r--r--sysdeps/mips/mips64/n32/fpu/e_sqrtf.c1
-rw-r--r--sysdeps/mips/mips64/n64/Implies5
-rw-r--r--sysdeps/mips/mips64/n64/Makefile6
-rw-r--r--sysdeps/mips/mips64/n64/crti.S100
-rw-r--r--sysdeps/mips/mips64/n64/crtn.S59
-rw-r--r--sysdeps/mips/mips64/n64/fpu/e_sqrt.c1
-rw-r--r--sysdeps/mips/mips64/n64/fpu/e_sqrtf.c1
-rw-r--r--sysdeps/mips/mips64/rshift.S97
-rw-r--r--sysdeps/mips/mips64/setjmp.S45
-rw-r--r--sysdeps/mips/mips64/setjmp_aux.c76
-rw-r--r--sysdeps/mips/mips64/sfp-machine.h108
-rw-r--r--sysdeps/mips/mips64/sub_n.S125
-rw-r--r--sysdeps/mips/mips64/submul_1.S132
-rw-r--r--sysdeps/mips/mul_1.S117
-rw-r--r--sysdeps/mips/nan-high-order-bit.h32
-rw-r--r--sysdeps/mips/nptl/Makefile25
-rw-r--r--sysdeps/mips/nptl/bits/pthreadtypes-arch.h87
-rw-r--r--sysdeps/mips/nptl/bits/semaphore.h36
-rw-r--r--sysdeps/mips/nptl/nptl-sysdep.S2
-rw-r--r--sysdeps/mips/nptl/pthreaddef.h32
-rw-r--r--sysdeps/mips/nptl/tcb-offsets.sym10
-rw-r--r--sysdeps/mips/nptl/tls.h186
-rw-r--r--sysdeps/mips/preconfigure29
-rw-r--r--sysdeps/mips/regdef.h25
-rw-r--r--sysdeps/mips/rshift.S94
-rw-r--r--sysdeps/mips/setjmp.S47
-rw-r--r--sysdeps/mips/setjmp_aux.c63
-rw-r--r--sysdeps/mips/sgidefs.h76
-rw-r--r--sysdeps/mips/sotruss-lib.c117
-rw-r--r--sysdeps/mips/stackinfo.h33
-rw-r--r--sysdeps/mips/start.S185
-rw-r--r--sysdeps/mips/strcmp.S249
-rw-r--r--sysdeps/mips/sub_n.S121
-rw-r--r--sysdeps/mips/submul_1.S128
-rw-r--r--sysdeps/mips/sys/asm.h498
-rw-r--r--sysdeps/mips/sys/fpregdef.h118
-rw-r--r--sysdeps/mips/sys/regdef.h81
-rw-r--r--sysdeps/mips/sys/tas.h69
-rw-r--r--sysdeps/mips/sys/ucontext.h176
-rw-r--r--sysdeps/mips/tininess.h1
-rw-r--r--sysdeps/mips/tls-macros.h130
-rw-r--r--sysdeps/mips/tst-abi-fp32mod.c22
-rw-r--r--sysdeps/mips/tst-abi-fp64amod.c22
-rw-r--r--sysdeps/mips/tst-abi-fp64mod.c22
-rw-r--r--sysdeps/mips/tst-abi-fpxxmod.c22
-rw-r--r--sysdeps/mips/tst-abi-fpxxomod.c22
-rw-r--r--sysdeps/mips/tst-abi-interlink.c844
-rw-r--r--sysdeps/mips/tst-audit.h39
-rw-r--r--sysdeps/mips/tst-mode-switch-1.c126
-rw-r--r--sysdeps/mips/tst-mode-switch-2.c166
-rw-r--r--sysdeps/mips/tst-mode-switch-3.c93
160 files changed, 0 insertions, 17202 deletions
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
- <http://www.gnu.org/licenses/>. */
-
-#include <setjmp.h>
-#include <stdlib.h>
-
-#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
-<http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
-/* 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
-<http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
-/* 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _MIPS_ATOMIC_MACHINE_H
-#define _MIPS_ATOMIC_MACHINE_H 1
-
-#include <stdint.h>
-#include <inttypes.h>
-#include <sgidefs.h>
-
-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 <sys/asm.h> 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 <sysdeps/x86_64/backtrace.c>
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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _DLFCN_H
-# error "Never use <bits/dlfcn.h> directly; include <dlfcn.h> 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 <bits/endian.h> directly; include <endian.h> 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _FENV_H
-# error "Never use <bits/fenv.h> directly; include <fenv.h> 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
- <http://www.gnu.org/licenses/>. */
-
-/*
- * Never include <bits/ipctypes.h> directly.
- */
-
-#ifndef _BITS_IPCTYPES_H
-#define _BITS_IPCTYPES_H 1
-
-#include <bits/types.h>
-
-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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _LINK_H
-# error "Never include <bits/link.h> directly; use <link.h> instead."
-#endif
-
-#include <sgidefs.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-#include <sgidefs.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _MATH_H
-# error "Never use <bits/nan.h> directly; include <math.h> 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 <endian.h>
-
-# 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _MIPS_BITS_SETJMP_H
-#define _MIPS_BITS_SETJMP_H 1
-
-#if !defined(_SETJMP_H) && !defined(_PTHREAD_H)
-# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
-#endif
-
-#include <sgidefs.h>
-
-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
- <http://www.gnu.org/licenses/>. */
-
-#include <sgidefs.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-/* 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 <sysdep.h>
-
- .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
- <http://www.gnu.org/licenses/>. */
-
-/* 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 <sysdep.h>
-
- .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
- <http://www.gnu.org/licenses/>. */
-
-/* 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _DL_MACHINE_REJECT_PHDR_H
-#define _DL_MACHINE_REJECT_PHDR_H 1
-
-#include <unistd.h>
-#include <sys/prctl.h>
-
-#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 <kkojima@info.kanagawa-u.ac.jp>.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* FIXME: Profiling of shared libraries is not implemented yet. */
-#ifndef dl_machine_h
-#define dl_machine_h
-
-#define ELF_MACHINE_NAME "MIPS"
-
-#include <entry.h>
-
-#ifndef ENTRY_POINT
-#error ENTRY_POINT needs to be defined for MIPS.
-#endif
-
-#include <sgidefs.h>
-#include <sysdep.h>
-#include <sys/asm.h>
-#include <dl-tls.h>
-
-/* 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 <rmh@gnu.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
- <http://www.gnu.org/licenses/>. */
-
-/* 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 <rmh@gnu.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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _DL_PROCINFO_H
-#define _DL_PROCINFO_H 1
-
-#include <ldsodefs.h>
-
-
-/* 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
- <http://www.gnu.org/licenses/>. */
-
-
-/* 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 <kkojima@info.kanagawa-u.ac.jp>.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <http://www.gnu.org/licenses/>. */
-
-/* FIXME: Profiling of shared libraries is not implemented yet. */
-
-#include <sysdep.h>
-#include <link.h>
-#include <elf.h>
-#include <ldsodefs.h>
-#include <dl-machine.h>
-#include <sysdep-cancel.h>
-
-/* 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _FPREGDEF_H
-#define _FPREGDEF_H
-
-#include <sys/fpregdef.h>
-
-#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 <hartvige@mips.com>, 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
- <http://www.gnu.org/licenses/>. */
-
-
-#include <sgidefs.h>
-
-
-#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 <sysdeps/ieee754/dbl-64/e_sqrt.c>
-
-#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 <hartvige@mips.com>, 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
- <http://www.gnu.org/licenses/>. */
-
-
-#include <sgidefs.h>
-
-
-#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 <sysdeps/ieee754/flt-32/e_sqrtf.c>
-
-#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 <aj@suse.de>, 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fenv_libc.h>
-#include <fpu_control.h>
-
-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 <aj@suse.de>, 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fenv_libc.h>
-#include <fpu_control.h>
-
-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 <aj@suse.de>, 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fenv_libc.h>
-#include <fpu_control.h>
-
-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 <aj@suse.de>, 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-
-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 <aj@suse.de>, 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fenv_libc.h>
-#include <fpu_control.h>
-
-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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-
-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 <aj@arthur.rhein-neckar.de>, 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-
-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 <aj@suse.de>, 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-
-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 <aj@suse.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
- <http://www.gnu.org/licenses/>. */
-
-#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 <aj@suse.de>, 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-
-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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-
-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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-
-#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 <aj@arthur.rhein-neckar.de>, 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-
-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 <aj@suse.de>, 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-
-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 <aj@suse.de>, 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-
-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 <aj@suse.de>, 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fenv_libc.h>
-#include <fpu_control.h>
-
-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 <hartvige@mips.com>, 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-
-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 <aj@arthur.rhein-neckar.de>, 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
- <http://www.gnu.org/licenses/>. */
-
-#include <fenv.h>
-#include <fpu_control.h>
-
-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
- <http://www.gnu.org/licenses/>. */
-
-#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 <features.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-#define FIRST_PSEUDO_REGISTER 76
-
-#include <sysdeps/generic/gccframe.h>
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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _IEEE754_H
-
-#define _IEEE754_H 1
-#include <features.h>
-
-#include <endian.h>
-
-#include <float.h>
-
-__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 <sysdeps/ieee754/dbl-64/s_fma.c>
-#else
-# include <soft-fp/fmadf4.c>
-#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 <sysdeps/ieee754/dbl-64/s_fmaf.c>
-#else
-# include <soft-fp/fmasf4.c>
-#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 <sgidefs.h>
-
-#if _MIPS_SIM == _ABIO32
-# error "long double fma being compiled for o32 ABI"
-#endif
-
-#include <soft-fp/fmatf4.c>
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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _SYS_ASM_H
-#include_next <sys/asm.h>
-
-# 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
- <http://www.gnu.org/licenses/>. */
-
-#include <setjmp.h>
-#include <stdint.h>
-#include <unwind.h>
-#include <sysdep.h>
-
-/* 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _MIPS_LDSODEFS_H
-#define _MIPS_LDSODEFS_H 1
-
-#include <elf.h>
-
-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 <ldsodefs.h>
-
-/* 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
- <http://www.gnu.org/licenses/>. */
-
-#include <csu/libc-tls.c>
-#include <dl-tls.h>
-
-/* 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
-<http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
-/* 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
- <http://www.gnu.org/licenses/>. */
-
-#include <sgidefs.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-#include <features.h>
-#include <sgidefs.h>
-
-/* 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 <math-tests.h>
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
- <http://www.gnu.org/licenses/>. */
-
-#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 <fenv.h>
-# include <fenv_libc.h>
-# include <fpu_control.h>
-
-# 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 <math_private.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-#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 <sysdep.h>
-# include <regdef.h>
-# include <sys/asm.h>
-# 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 <regdef.h>
-# include <sys/asm.h>
-#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
- <http://www.gnu.org/licenses/>. */
-
-#ifdef ANDROID_CHANGES
-# include "machine/asm.h"
-# include "machine/regdef.h"
-# define PREFETCH_STORE_HINT PREFETCH_HINT_PREPAREFORSTORE
-#elif _LIBC
-# include <sysdep.h>
-# include <regdef.h>
-# include <sys/asm.h>
-# 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 <regdef.h>
-# include <sys/asm.h>
-#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
- <http://www.gnu.org/licenses/>. */
-
-#define GETSP() ({ register uintptr_t stack_ptr asm ("$29"); stack_ptr; })
-
-#include <sysdeps/generic/memusage.h>
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
- <http://www.gnu.org/licenses/>. */
-
-/* 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 <libc-symbols.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-/* 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 <sysdeps/mips/fpu/e_sqrt.c>
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 <sysdeps/mips/fpu/e_sqrtf.c>
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
- <http://www.gnu.org/licenses/>. */
-
-#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 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59412>). */
-#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
- <http://www.gnu.org/licenses/>. */
-
-#include <fpu_control.h>
-
-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 <stdlib/add_n.c>
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 <stdlib/addmul_1.c>
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 <stdlib/lshift.c>
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 <stdlib/mul_1.c>
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 <stdlib/rshift.c>
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 <stdlib/sub_n.c>
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 <stdlib/submul_1.c>
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
- <http://www.gnu.org/licenses/>. */
-
-#include <setjmp.h>
-#include <sgidefs.h>
-#include <stdlib.h>
-
-#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
- * <http://www.gnu.org/licenses/>.
- */
-
-#include <sysdep.h>
-#include <sys/asm.h>
-
-/*
- * 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 <http://www.gnu.org/licenses/>.
- */
-
-#include <sysdep.h>
-#include <sys/asm.h>
-
-/* 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
- <http://www.gnu.org/licenses/>. */
-
-/* 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 <sgidefs.h>
-#include <sysdep.h>
-#include <sys/asm.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-/* 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 <sgidefs.h>
-#include <sysdep.h>
-#include <sys/asm.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-#include <stdlib.h>
-#include <soft-fp.h>
-#include <quad.h>
-
-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 <http://www.gnu.org/licenses/>. */
-
-#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
- * <http://www.gnu.org/licenses/>.
- */
-
-#include <sysdep.h>
-#include <sys/asm.h>
-
-/* 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
- * <http://www.gnu.org/licenses/>.
- */
-
-#include <sysdep.h>
-#include <sys/asm.h>
-
-/* 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
- <http://www.gnu.org/licenses/>. */
-
-/* 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 <libc-symbols.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-/* 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 <sysdeps/mips/fpu/e_sqrt.c>
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 <sysdeps/mips/fpu/e_sqrtf.c>
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
- <http://www.gnu.org/licenses/>. */
-
-/* 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 <libc-symbols.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-/* 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 <sysdeps/mips/fpu/e_sqrt.c>
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 <sysdeps/mips/fpu/e_sqrtf.c>
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
- * <http://www.gnu.org/licenses/>.
- */
-
-#include <sysdep.h>
-#include <sys/asm.h>
-
-/* 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
- <http://www.gnu.org/licenses/>. */
-
-#include <sgidefs.h>
-#include <sysdep.h>
-#include <sys/asm.h>
-
-/* 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
- <http://www.gnu.org/licenses/>. */
-
-#include <setjmp.h>
-#include <sgidefs.h>
-
-/* 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 <fenv.h>
-#include <fpu_control.h>
-
-#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
- * <http://www.gnu.org/licenses/>.
- */
-
-#include <sysdep.h>
-#include <sys/asm.h>
-
-/* 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
- * <http://www.gnu.org/licenses/>.
- */
-
-#include <sysdep.h>
-#include <sys/asm.h>
-
-/* 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
-<http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
-/* 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
- <http://www.gnu.org/licenses/>. */
-
-#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
-# <http://www.gnu.org/licenses/>.
-
-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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _BITS_PTHREADTYPES_ARCH_H
-#define _BITS_PTHREADTYPES_ARCH_H 1
-
-#include <endian.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _SEMAPHORE_H
-# error "Never use <bits/semaphore.h> directly; include <semaphore.h> 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 <sysdep.S>
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
- <http://www.gnu.org/licenses/>. */
-
-/* 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 <sysdep.h>
-#include <tls.h>
-
---
-
--- 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _TLS_H
-#define _TLS_H 1
-
-#include <dl-sysdep.h>
-
-#ifndef __ASSEMBLER__
-# include <stdbool.h>
-# include <stddef.h>
-# include <stdint.h>
-# include <dl-dtv.h>
-
-/* Get system call information. */
-# include <sysdep.h>
-
-#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 <tcb-offsets.h>
-
-# 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 <nptl/descr.h>
-
-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 <ralf@gnu.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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _REGDEF_H
-#define _REGDEF_H
-
-#include <sys/regdef.h>
-#include <sys/fpregdef.h>
-
-#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
-<http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
-/* 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
- <http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
- .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
- <http://www.gnu.org/licenses/>. */
-
-#include <setjmp.h>
-
-/* 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 <ralf@gnu.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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _SGIDEFS_H
-#define _SGIDEFS_H 1
-
-/*
- * A crude hack to stop <asm/sgidefs.h>
- */
-#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
- <http://www.gnu.org/licenses/>. */
-
-#define HAVE_ARCH_PLTENTER
-#define HAVE_ARCH_PLTEXIT
-
-#include <elf/sotruss-lib.c>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-/* This file contains a bit of information about the stack allocation
- of the processor. */
-
-#ifndef _STACKINFO_H
-#define _STACKINFO_H 1
-
-#include <elf.h>
-
-/* 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
- <http://www.gnu.org/licenses/>. */
-
-#define __ASSEMBLY__ 1
-#include <entry.h>
-#include <sgidefs.h>
-#include <sys/asm.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-#ifdef ANDROID_CHANGES
-# include "machine/asm.h"
-# include "machine/regdef.h"
-#elif _LIBC
-# include <sysdep.h>
-# include <regdef.h>
-# include <sys/asm.h>
-#elif defined _COMPILING_NEWLIB
-# include "machine/asm.h"
-# include "machine/regdef.h"
-#else
-# include <regdef.h>
-# include <sys/asm.h>
-#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
-<http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
-/* 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
-<http://www.gnu.org/licenses/>. */
-
-#include <sysdep.h>
-
-/* 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 <ralf@gnu.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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _SYS_ASM_H
-#define _SYS_ASM_H
-
-#include <sgidefs.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _SYS_FPREGDEF_H
-#define _SYS_FPREGDEF_H
-
-#include <sgidefs.h>
-
-/* 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 <ralf@gnu.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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _SYS_REGDEF_H
-#define _SYS_REGDEF_H
-
-#include <sgidefs.h>
-
-/*
- * 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 <macro@ds2.pg.gda.pl>, 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
- <http://www.gnu.org/licenses/>. */
-
-#ifndef _SYS_TAS_H
-#define _SYS_TAS_H 1
-
-#include <features.h>
-#include <sgidefs.h>
-
-__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
- <http://www.gnu.org/licenses/>. */
-
-/* System V/mips ABI compliant context switching support. */
-
-#ifndef _SYS_UCONTEXT_H
-#define _SYS_UCONTEXT_H 1
-
-#include <features.h>
-
-#include <bits/types/sigset_t.h>
-#include <bits/sigcontext.h>
-#include <bits/types/stack_t.h>
-
-#include <sgidefs.h>
-
-
-/* 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 <sys/cdefs.h>
-#include <sys/asm.h>
-#include <sysdep.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-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
- <http://www.gnu.org/licenses/>. */
-
-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
- <http://www.gnu.org/licenses/>. */
-
-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
- <http://www.gnu.org/licenses/>. */
-
-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
- <http://www.gnu.org/licenses/>. */
-
-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
- <http://www.gnu.org/licenses/>. */
-
-#include <sys/prctl.h>
-#include <dlfcn.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdbool.h>
-#include <errno.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-#include <sgidefs.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <limits.h>
-#include <sys/prctl.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <limits.h>
-#include <pthread.h>
-#include <sys/prctl.h>
-
-#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
- <http://www.gnu.org/licenses/>. */
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <setjmp.h>
-#include <sys/prctl.h>
-
-#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"