mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-08 18:30:18 +00:00
Update.
2001-04-29 Ben Collins <bcollins@debian.org> * sysdeps/sparc/sparc64/dl-machine.h: Fix multiline strings warnings. * sysdeps/sparc/sparc64/soft-fp/qp_add.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_cmp.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_cmpe.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_div.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_feq.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_fge.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_fgt.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_fle.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_flt.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_fne.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_mul.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_qtod.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_qtos.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_qtox.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_qtox.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_sqrt.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_stoq.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/qp_sub.c: Likewise. * sysdeps/sparc/sparc64/soft-fp/sfp-machine.h: Likewise.
This commit is contained in:
parent
354fa0497f
commit
ba77ce24a6
28
ChangeLog
28
ChangeLog
@ -1,3 +1,31 @@
|
||||
2001-04-29 Ben Collins <bcollins@debian.org>
|
||||
|
||||
* sysdeps/sparc/sparc64/dl-machine.h: Fix multiline strings
|
||||
warnings.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_add.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_cmp.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_cmpe.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_div.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_dtoq.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_feq.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_fge.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_fgt.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_fle.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_flt.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_fne.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_mul.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_qtod.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_qtos.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_qtox.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_qtox.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_sqrt.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_stoq.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/qp_sub.c: Likewise.
|
||||
* sysdeps/sparc/sparc64/soft-fp/sfp-machine.h: Likewise.
|
||||
|
||||
2001-04-29 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
* sysdeps/unix/sysv/linux/kernel-features.h: Fix missing backslash
|
||||
|
@ -481,53 +481,53 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
||||
/* This code is used in dl-runtime.c to call the `fixup' function
|
||||
and then redirect to the address it returns. */
|
||||
#define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name) \
|
||||
asm ("\
|
||||
.text
|
||||
.globl " #tramp_name "_0
|
||||
.type " #tramp_name "_0, @function
|
||||
.align 32
|
||||
" #tramp_name "_0:
|
||||
! sethi %hi(1047552), %l2 - Done in .PLT0
|
||||
ldx [%l6 + 32 + 8], %o0
|
||||
sub %g1, %l6, %l0
|
||||
xor %l2, -1016, %l2
|
||||
sethi %hi(5120), %l3 ! 160 * 32
|
||||
add %l0, %l2, %l0
|
||||
sethi %hi(32768), %l4
|
||||
udivx %l0, %l3, %l3
|
||||
sllx %l3, 2, %l1
|
||||
add %l1, %l3, %l1
|
||||
sllx %l1, 10, %l2
|
||||
sub %l4, 4, %l4 ! No thanks to Sun for not obeying their own ABI
|
||||
sllx %l1, 5, %l1
|
||||
sub %l0, %l2, %l0
|
||||
udivx %l0, 24, %l0
|
||||
add %l0, %l4, %l0
|
||||
add %l1, %l0, %l1
|
||||
add %l1, %l1, %l0
|
||||
add %l0, %l1, %l0
|
||||
mov %i7, %o2
|
||||
call " #fixup_name "
|
||||
sllx %l0, 3, %o1
|
||||
jmp %o0
|
||||
restore
|
||||
.size " #tramp_name "_0, . - " #tramp_name "_0
|
||||
|
||||
.globl " #tramp_name "_1
|
||||
.type " #tramp_name "_1, @function
|
||||
.align 32
|
||||
" #tramp_name "_1:
|
||||
! srlx %g1, 12, %o1 - Done in .PLT1
|
||||
ldx [%l6 + 8], %o0
|
||||
add %o1, %o1, %o3
|
||||
sub %o1, 96, %o1 ! No thanks to Sun for not obeying their own ABI
|
||||
mov %i7, %o2
|
||||
call " #fixup_name "
|
||||
add %o1, %o3, %o1
|
||||
jmp %o0
|
||||
restore
|
||||
.size " #tramp_name "_1, . - " #tramp_name "_1
|
||||
.previous");
|
||||
asm ("\n" \
|
||||
" .text\n" \
|
||||
" .globl " #tramp_name "_0\n" \
|
||||
" .type " #tramp_name "_0, @function\n" \
|
||||
" .align 32\n" \
|
||||
"\t" #tramp_name "_0:\n" \
|
||||
" ! sethi %hi(1047552), %l2 - Done in .PLT0\n" \
|
||||
" ldx [%l6 + 32 + 8], %o0\n" \
|
||||
" sub %g1, %l6, %l0\n" \
|
||||
" xor %l2, -1016, %l2\n" \
|
||||
" sethi %hi(5120), %l3 ! 160 * 32\n" \
|
||||
" add %l0, %l2, %l0\n" \
|
||||
" sethi %hi(32768), %l4\n" \
|
||||
" udivx %l0, %l3, %l3\n" \
|
||||
" sllx %l3, 2, %l1\n" \
|
||||
" add %l1, %l3, %l1\n" \
|
||||
" sllx %l1, 10, %l2\n" \
|
||||
" sub %l4, 4, %l4 ! No thanks to Sun for not obeying their own ABI\n" \
|
||||
" sllx %l1, 5, %l1\n" \
|
||||
" sub %l0, %l2, %l0\n" \
|
||||
" udivx %l0, 24, %l0\n" \
|
||||
" add %l0, %l4, %l0\n" \
|
||||
" add %l1, %l0, %l1\n" \
|
||||
" add %l1, %l1, %l0\n" \
|
||||
" add %l0, %l1, %l0\n" \
|
||||
" mov %i7, %o2\n" \
|
||||
" call " #fixup_name "\n" \
|
||||
" sllx %l0, 3, %o1\n" \
|
||||
" jmp %o0\n" \
|
||||
" restore\n" \
|
||||
" .size " #tramp_name "_0, . - " #tramp_name "_0\n" \
|
||||
"\n" \
|
||||
" .globl " #tramp_name "_1\n" \
|
||||
" .type " #tramp_name "_1, @function\n" \
|
||||
" .align 32\n" \
|
||||
"\t" #tramp_name "_1:\n" \
|
||||
" ! srlx %g1, 12, %o1 - Done in .PLT1\n" \
|
||||
" ldx [%l6 + 8], %o0\n" \
|
||||
" add %o1, %o1, %o3\n" \
|
||||
" sub %o1, 96, %o1 ! No thanks to Sun for not obeying their own ABI\n" \
|
||||
" mov %i7, %o2\n" \
|
||||
" call " #fixup_name "\n" \
|
||||
" add %o1, %o3, %o1\n" \
|
||||
" jmp %o0\n" \
|
||||
" restore\n" \
|
||||
" .size " #tramp_name "_1, . - " #tramp_name "_1\n" \
|
||||
" .previous\n");
|
||||
|
||||
#ifndef PROF
|
||||
#define ELF_MACHINE_RUNTIME_TRAMPOLINE \
|
||||
@ -549,94 +549,94 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
||||
#define __S1(x) #x
|
||||
#define __S(x) __S1(x)
|
||||
|
||||
#define RTLD_START __asm__ ( "\
|
||||
.text
|
||||
.global _start
|
||||
.type _start, @function
|
||||
.align 32
|
||||
_start:
|
||||
/* Make room for functions to drop their arguments on the stack. */
|
||||
sub %sp, 6*8, %sp
|
||||
/* Pass pointer to argument block to _dl_start. */
|
||||
call _dl_start
|
||||
add %sp," __S(STACK_BIAS) "+22*8,%o0
|
||||
/* FALLTHRU */
|
||||
.size _start, .-_start
|
||||
|
||||
.global _dl_start_user
|
||||
.type _dl_start_user, @function
|
||||
_dl_start_user:
|
||||
/* Load the GOT register. */
|
||||
1: call 11f
|
||||
sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
|
||||
11: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7
|
||||
/* Store the highest stack address. */
|
||||
sethi %hi(__libc_stack_end), %g5
|
||||
add %l7, %o7, %l7
|
||||
or %g5, %lo(__libc_stack_end), %g5
|
||||
/* Save the user entry point address in %l0. */
|
||||
mov %o0, %l0
|
||||
ldx [%l7 + %g5], %l1
|
||||
sethi %hi(_dl_skip_args), %g5
|
||||
add %sp, 6*8, %l2
|
||||
/* See if we were run as a command with the executable file name as an
|
||||
extra leading argument. If so, we must shift things around since we
|
||||
must keep the stack doubleword aligned. */
|
||||
or %g5, %lo(_dl_skip_args), %g5
|
||||
stx %l2, [%l1]
|
||||
ldx [%l7 + %g5], %i0
|
||||
ld [%i0], %i0
|
||||
brz,pt %i0, 2f
|
||||
ldx [%sp + " __S(STACK_BIAS) " + 22*8], %i5
|
||||
/* Find out how far to shift. */
|
||||
sethi %hi(_dl_argv), %l4
|
||||
sub %i5, %i0, %i5
|
||||
or %l4, %lo(_dl_argv), %l4
|
||||
sllx %i0, 3, %l6
|
||||
ldx [%l7 + %l4], %l4
|
||||
stx %i5, [%sp + " __S(STACK_BIAS) " + 22*8]
|
||||
add %sp, " __S(STACK_BIAS) " + 23*8, %i1
|
||||
add %i1, %l6, %i2
|
||||
ldx [%l4], %l5
|
||||
/* Copy down argv. */
|
||||
12: ldx [%i2], %i3
|
||||
add %i2, 8, %i2
|
||||
stx %i3, [%i1]
|
||||
brnz,pt %i3, 12b
|
||||
add %i1, 8, %i1
|
||||
sub %l5, %l6, %l5
|
||||
/* Copy down envp. */
|
||||
13: ldx [%i2], %i3
|
||||
add %i2, 8, %i2
|
||||
stx %i3, [%i1]
|
||||
brnz,pt %i3, 13b
|
||||
add %i1, 8, %i1
|
||||
/* Copy down auxiliary table. */
|
||||
14: ldx [%i2], %i3
|
||||
ldx [%i2 + 8], %i4
|
||||
add %i2, 16, %i2
|
||||
stx %i3, [%i1]
|
||||
stx %i4, [%i1 + 8]
|
||||
brnz,pt %i3, 14b
|
||||
add %i1, 16, %i1
|
||||
stx %l5, [%l4]
|
||||
/* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */
|
||||
2: sethi %hi(_dl_loaded), %o0
|
||||
add %sp, " __S(STACK_BIAS) " + 23*8, %o2
|
||||
orcc %o0, %lo(_dl_loaded), %o0
|
||||
sllx %i5, 3, %o3
|
||||
ldx [%l7 + %o0], %o0
|
||||
add %o3, 8, %o3
|
||||
mov %i5, %o1
|
||||
add %o2, %o3, %o3
|
||||
call _dl_init
|
||||
ldx [%o0], %o0
|
||||
/* Pass our finalizer function to the user in %g1. */
|
||||
sethi %hi(_dl_fini), %g1
|
||||
or %g1, %lo(_dl_fini), %g1
|
||||
ldx [%l7 + %g1], %g1
|
||||
/* Jump to the user's entry point and deallocate the extra stack we got. */
|
||||
jmp %l0
|
||||
add %sp, 6*8, %sp
|
||||
.size _dl_start_user, . - _dl_start_user
|
||||
.previous");
|
||||
#define RTLD_START __asm__ ( "\n" \
|
||||
" .text\n" \
|
||||
" .global _start\n" \
|
||||
" .type _start, @function\n" \
|
||||
" .align 32\n" \
|
||||
"_start:\n" \
|
||||
" /* Make room for functions to drop their arguments on the stack. */\n" \
|
||||
" sub %sp, 6*8, %sp\n" \
|
||||
" /* Pass pointer to argument block to _dl_start. */\n" \
|
||||
" call _dl_start\n" \
|
||||
" add %sp," __S(STACK_BIAS) "+22*8,%o0\n" \
|
||||
" /* FALLTHRU */\n" \
|
||||
" .size _start, .-_start\n" \
|
||||
"\n" \
|
||||
" .global _dl_start_user\n" \
|
||||
" .type _dl_start_user, @function\n" \
|
||||
"_dl_start_user:\n" \
|
||||
" /* Load the GOT register. */\n" \
|
||||
"1: call 11f\n" \
|
||||
" sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n" \
|
||||
"11: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7\n" \
|
||||
" /* Store the highest stack address. */\n" \
|
||||
" sethi %hi(__libc_stack_end), %g5\n" \
|
||||
" add %l7, %o7, %l7\n" \
|
||||
" or %g5, %lo(__libc_stack_end), %g5\n" \
|
||||
" /* Save the user entry point address in %l0. */\n" \
|
||||
" mov %o0, %l0\n" \
|
||||
" ldx [%l7 + %g5], %l1\n" \
|
||||
" sethi %hi(_dl_skip_args), %g5\n" \
|
||||
" add %sp, 6*8, %l2\n" \
|
||||
" /* See if we were run as a command with the executable file name as an\n" \
|
||||
" extra leading argument. If so, we must shift things around since we\n" \
|
||||
" must keep the stack doubleword aligned. */\n" \
|
||||
" or %g5, %lo(_dl_skip_args), %g5\n" \
|
||||
" stx %l2, [%l1]\n" \
|
||||
" ldx [%l7 + %g5], %i0\n" \
|
||||
" ld [%i0], %i0\n" \
|
||||
" brz,pt %i0, 2f\n" \
|
||||
" ldx [%sp + " __S(STACK_BIAS) " + 22*8], %i5\n" \
|
||||
" /* Find out how far to shift. */\n" \
|
||||
" sethi %hi(_dl_argv), %l4\n" \
|
||||
" sub %i5, %i0, %i5\n" \
|
||||
" or %l4, %lo(_dl_argv), %l4\n" \
|
||||
" sllx %i0, 3, %l6\n" \
|
||||
" ldx [%l7 + %l4], %l4\n" \
|
||||
" stx %i5, [%sp + " __S(STACK_BIAS) " + 22*8]\n" \
|
||||
" add %sp, " __S(STACK_BIAS) " + 23*8, %i1\n" \
|
||||
" add %i1, %l6, %i2\n" \
|
||||
" ldx [%l4], %l5\n" \
|
||||
" /* Copy down argv. */\n" \
|
||||
"12: ldx [%i2], %i3\n" \
|
||||
" add %i2, 8, %i2\n" \
|
||||
" stx %i3, [%i1]\n" \
|
||||
" brnz,pt %i3, 12b\n" \
|
||||
" add %i1, 8, %i1\n" \
|
||||
" sub %l5, %l6, %l5\n" \
|
||||
" /* Copy down envp. */\n" \
|
||||
"13: ldx [%i2], %i3\n" \
|
||||
" add %i2, 8, %i2\n" \
|
||||
" stx %i3, [%i1]\n" \
|
||||
" brnz,pt %i3, 13b\n" \
|
||||
" add %i1, 8, %i1\n" \
|
||||
" /* Copy down auxiliary table. */\n" \
|
||||
"14: ldx [%i2], %i3\n" \
|
||||
" ldx [%i2 + 8], %i4\n" \
|
||||
" add %i2, 16, %i2\n" \
|
||||
" stx %i3, [%i1]\n" \
|
||||
" stx %i4, [%i1 + 8]\n" \
|
||||
" brnz,pt %i3, 14b\n" \
|
||||
" add %i1, 16, %i1\n" \
|
||||
" stx %l5, [%l4]\n" \
|
||||
" /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */\n" \
|
||||
"2: sethi %hi(_dl_loaded), %o0\n" \
|
||||
" add %sp, " __S(STACK_BIAS) " + 23*8, %o2\n" \
|
||||
" orcc %o0, %lo(_dl_loaded), %o0\n" \
|
||||
" sllx %i5, 3, %o3\n" \
|
||||
" ldx [%l7 + %o0], %o0\n" \
|
||||
" add %o3, 8, %o3\n" \
|
||||
" mov %i5, %o1\n" \
|
||||
" add %o2, %o3, %o3\n" \
|
||||
" call _dl_init\n" \
|
||||
" ldx [%o0], %o0\n" \
|
||||
" /* Pass our finalizer function to the user in %g1. */\n" \
|
||||
" sethi %hi(_dl_fini), %g1\n" \
|
||||
" or %g1, %lo(_dl_fini), %g1\n" \
|
||||
" ldx [%l7 + %g1], %g1\n" \
|
||||
" /* Jump to the user's entry point and deallocate the extra stack we got. */\n" \
|
||||
" jmp %l0\n" \
|
||||
" add %sp, 6*8, %sp\n" \
|
||||
" .size _dl_start_user, . - _dl_start_user\n" \
|
||||
" .previous\n");
|
||||
|
@ -34,12 +34,12 @@ void _Qp_add(long double *c, const long double *a, const long double *b)
|
||||
FP_ADD_Q(C, A, B);
|
||||
FP_PACK_QP(c, C);
|
||||
QP_HANDLE_EXCEPTIONS(__asm (
|
||||
"ldd [%1], %%f52
|
||||
ldd [%1+8], %%f54
|
||||
ldd [%2], %%f56
|
||||
ldd [%2+8], %%f58
|
||||
faddq %%f52, %%f56, %%f60
|
||||
std %%f60, [%0]
|
||||
std %%f62, [%0+8]
|
||||
" : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER));
|
||||
" ldd [%1], %%f52\n"
|
||||
" ldd [%1+8], %%f54\n"
|
||||
" ldd [%2], %%f56\n"
|
||||
" ldd [%2+8], %%f58\n"
|
||||
" faddq %%f52, %%f56, %%f60\n"
|
||||
" std %%f60, [%0]\n"
|
||||
" std %%f62, [%0+8]\n"
|
||||
" " : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER));
|
||||
}
|
||||
|
@ -38,12 +38,12 @@ int _Qp_cmp(const long double *a, const long double *b)
|
||||
FP_SET_EXCEPTION(FP_EX_INVALID);
|
||||
QP_HANDLE_EXCEPTIONS(
|
||||
__asm (
|
||||
"ldd [%0], %%f52
|
||||
ldd [%0+8], %%f54
|
||||
ldd [%1], %%f56
|
||||
ldd [%1+8], %%f58
|
||||
fcmpq %%fcc3, %%f52, %%f56
|
||||
" : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
" ldd [%0], %%f52\n"
|
||||
" ldd [%0+8], %%f54\n"
|
||||
" ldd [%1], %%f56\n"
|
||||
" ldd [%1+8], %%f58\n"
|
||||
" fcmpq %%fcc3, %%f52, %%f56\n"
|
||||
" " : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
_FPU_GETCW(_fcw);
|
||||
r = ((_fcw >> 36) & 3));
|
||||
|
||||
|
@ -39,12 +39,12 @@ int _Qp_cmpe(const long double *a, const long double *b)
|
||||
FP_SET_EXCEPTION(FP_EX_INVALID);
|
||||
QP_HANDLE_EXCEPTIONS(
|
||||
__asm (
|
||||
"ldd [%0], %%f52
|
||||
ldd [%0+8], %%f54
|
||||
ldd [%1], %%f56
|
||||
ldd [%1+8], %%f58
|
||||
fcmpeq %%fcc3, %%f52, %%f56
|
||||
" : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
" ldd [%0], %%f52\n"
|
||||
" ldd [%0+8], %%f54\n"
|
||||
" ldd [%1], %%f56\n"
|
||||
" ldd [%1+8], %%f58\n"
|
||||
" fcmpeq %%fcc3, %%f52, %%f56\n"
|
||||
" " : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
_FPU_GETCW(_fcw);
|
||||
r = ((_fcw >> 36) & 3));
|
||||
|
||||
|
@ -34,12 +34,12 @@ void _Qp_div(long double *c, const long double *a, const long double *b)
|
||||
FP_DIV_Q(C, A, B);
|
||||
FP_PACK_QP(c, C);
|
||||
QP_HANDLE_EXCEPTIONS(__asm (
|
||||
"ldd [%1], %%f52
|
||||
ldd [%1+8], %%f54
|
||||
ldd [%2], %%f56
|
||||
ldd [%2+8], %%f58
|
||||
fdivq %%f52, %%f56, %%f60
|
||||
std %%f60, [%0]
|
||||
std %%f62, [%0+8]
|
||||
" : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER));
|
||||
" ldd [%1], %%f52\n"
|
||||
" ldd [%1+8], %%f54\n"
|
||||
" ldd [%2], %%f56\n"
|
||||
" ldd [%2+8], %%f58\n"
|
||||
" fdivq %%f52, %%f56, %%f60\n"
|
||||
" std %%f60, [%0]\n"
|
||||
" std %%f62, [%0+8]\n"
|
||||
" " : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER));
|
||||
}
|
||||
|
@ -39,8 +39,8 @@ void _Qp_dtoq(long double *c, const double a)
|
||||
#endif
|
||||
FP_PACK_QP(c, C);
|
||||
QP_HANDLE_EXCEPTIONS(__asm (
|
||||
"fdtoq %1, %%f60
|
||||
std %%f60, [%0]
|
||||
std %%f62, [%0+8]
|
||||
" : : "r" (c), "e" (a) : QP_CLOBBER));
|
||||
" fdtoq %1, %%f60\n"
|
||||
" std %%f60, [%0]\n"
|
||||
" std %%f62, [%0+8]\n"
|
||||
" " : : "r" (c), "e" (a) : QP_CLOBBER));
|
||||
}
|
||||
|
@ -38,12 +38,12 @@ int _Qp_feq(const long double *a, const long double *b)
|
||||
|
||||
QP_HANDLE_EXCEPTIONS(
|
||||
__asm (
|
||||
"ldd [%0], %%f52
|
||||
ldd [%0+8], %%f54
|
||||
ldd [%1], %%f56
|
||||
ldd [%1+8], %%f58
|
||||
fcmpq %%fcc3, %%f52, %%f56
|
||||
" : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
" ldd [%0], %%f52\n"
|
||||
" ldd [%0+8], %%f54\n"
|
||||
" ldd [%1], %%f56\n"
|
||||
" ldd [%1+8], %%f58\n"
|
||||
" fcmpq %%fcc3, %%f52, %%f56\n"
|
||||
" " : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
_FPU_GETCW(_fcw);
|
||||
r = ((_fcw >> 36) & 3));
|
||||
|
||||
|
@ -38,12 +38,12 @@ int _Qp_fge(const long double *a, const long double *b)
|
||||
|
||||
QP_HANDLE_EXCEPTIONS(
|
||||
__asm (
|
||||
"ldd [%0], %%f52
|
||||
ldd [%0+8], %%f54
|
||||
ldd [%1], %%f56
|
||||
ldd [%1+8], %%f58
|
||||
fcmpeq %%fcc3, %%f52, %%f56
|
||||
" : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
" ldd [%0], %%f52\n"
|
||||
" ldd [%0+8], %%f54\n"
|
||||
" ldd [%1], %%f56\n"
|
||||
" ldd [%1+8], %%f58\n"
|
||||
" fcmpeq %%fcc3, %%f52, %%f56\n"
|
||||
" " : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
_FPU_GETCW(_fcw);
|
||||
r = ((_fcw >> 36) & 1));
|
||||
|
||||
|
@ -38,12 +38,12 @@ int _Qp_fgt(const long double *a, const long double *b)
|
||||
|
||||
QP_HANDLE_EXCEPTIONS(
|
||||
__asm (
|
||||
"ldd [%0], %%f52
|
||||
ldd [%0+8], %%f54
|
||||
ldd [%1], %%f56
|
||||
ldd [%1+8], %%f58
|
||||
fcmpeq %%fcc3, %%f52, %%f56
|
||||
" : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
" ldd [%0], %%f52\n"
|
||||
" ldd [%0+8], %%f54\n"
|
||||
" ldd [%1], %%f56\n"
|
||||
" ldd [%1+8], %%f58\n"
|
||||
" fcmpeq %%fcc3, %%f52, %%f56\n"
|
||||
" " : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
_FPU_GETCW(_fcw);
|
||||
r = ((_fcw >> 36) & 3) - 3);
|
||||
|
||||
|
@ -38,12 +38,12 @@ int _Qp_fle(const long double *a, const long double *b)
|
||||
|
||||
QP_HANDLE_EXCEPTIONS(
|
||||
__asm (
|
||||
"ldd [%0], %%f52
|
||||
ldd [%0+8], %%f54
|
||||
ldd [%1], %%f56
|
||||
ldd [%1+8], %%f58
|
||||
fcmpeq %%fcc3, %%f52, %%f56
|
||||
" : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
" ldd [%0], %%f52\n"
|
||||
" ldd [%0+8], %%f54\n"
|
||||
" ldd [%1], %%f56\n"
|
||||
" ldd [%1+8], %%f58\n"
|
||||
" fcmpeq %%fcc3, %%f52, %%f56\n"
|
||||
" " : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
_FPU_GETCW(_fcw);
|
||||
r = ((_fcw >> 36) & 2) ? -1 : 0);
|
||||
|
||||
|
@ -38,12 +38,12 @@ int _Qp_flt(const long double *a, const long double *b)
|
||||
|
||||
QP_HANDLE_EXCEPTIONS(
|
||||
__asm (
|
||||
"ldd [%0], %%f52
|
||||
ldd [%0+8], %%f54
|
||||
ldd [%1], %%f56
|
||||
ldd [%1+8], %%f58
|
||||
fcmpeq %%fcc3, %%f52, %%f56
|
||||
" : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
" ldd [%0], %%f52\n"
|
||||
" ldd [%0+8], %%f54\n"
|
||||
" ldd [%1], %%f56\n"
|
||||
" ldd [%1+8], %%f58\n"
|
||||
" fcmpeq %%fcc3, %%f52, %%f56\n"
|
||||
" " : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
_FPU_GETCW(_fcw);
|
||||
r = ((_fcw >> 36) & 3));
|
||||
|
||||
|
@ -38,12 +38,12 @@ int _Qp_fne(const long double *a, const long double *b)
|
||||
|
||||
QP_HANDLE_EXCEPTIONS(
|
||||
__asm (
|
||||
"ldd [%0], %%f52
|
||||
ldd [%0+8], %%f54
|
||||
ldd [%1], %%f56
|
||||
ldd [%1+8], %%f58
|
||||
fcmpq %%fcc3, %%f52, %%f56
|
||||
" : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
" ldd [%0], %%f52\n"
|
||||
" ldd [%0+8], %%f54\n"
|
||||
" ldd [%1], %%f56\n"
|
||||
" ldd [%1+8], %%f58\n"
|
||||
" fcmpq %%fcc3, %%f52, %%f56\n"
|
||||
" " : : "r" (a), "r" (b) : QP_CLOBBER_CC);
|
||||
_FPU_GETCW(_fcw);
|
||||
r = ((_fcw >> 36) & 3) != 0);
|
||||
|
||||
|
@ -39,12 +39,12 @@ void _Qp_mul(long double *c, const long double *a, const long double *b)
|
||||
QP_HANDLE_EXCEPTIONS(
|
||||
_FPU_SETCW(_fcw);
|
||||
__asm (
|
||||
"ldd [%1], %%f52
|
||||
ldd [%1+8], %%f54
|
||||
ldd [%2], %%f56
|
||||
ldd [%2+8], %%f58
|
||||
fmulq %%f52, %%f56, %%f60
|
||||
std %%f60, [%0]
|
||||
std %%f62, [%0+8]
|
||||
" : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER));
|
||||
" ldd [%1], %%f52\n"
|
||||
" ldd [%1+8], %%f54\n"
|
||||
" ldd [%2], %%f56\n"
|
||||
" ldd [%2+8], %%f58\n"
|
||||
" fmulq %%f52, %%f56, %%f60\n"
|
||||
" std %%f60, [%0]\n"
|
||||
" std %%f62, [%0+8]\n"
|
||||
" " : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER));
|
||||
}
|
||||
|
@ -40,10 +40,10 @@ double _Qp_qtod(const long double *a)
|
||||
#endif
|
||||
FP_PACK_D(r, R);
|
||||
QP_HANDLE_EXCEPTIONS(__asm (
|
||||
"ldd [%1], %%f52
|
||||
ldd [%1+8], %%f54
|
||||
fqtod %%f52, %0
|
||||
" : "=&e" (r) : "r" (a) : QP_CLOBBER));
|
||||
" ldd [%1], %%f52\n"
|
||||
" ldd [%1+8], %%f54\n"
|
||||
" fqtod %%f52, %0\n"
|
||||
" " : "=&e" (r) : "r" (a) : QP_CLOBBER));
|
||||
|
||||
return r;
|
||||
}
|
||||
|
@ -36,11 +36,11 @@ int _Qp_qtoi(const long double *a)
|
||||
QP_HANDLE_EXCEPTIONS(
|
||||
int rx;
|
||||
__asm (
|
||||
"ldd [%1], %%f52
|
||||
ldd [%1+8], %%f54
|
||||
fqtoi %%f52, %%f60
|
||||
st %%f60, [%0]
|
||||
" : : "r" (&rx), "r" (a) : QP_CLOBBER);
|
||||
" ldd [%1], %%f52\n"
|
||||
" ldd [%1+8], %%f54\n"
|
||||
" fqtoi %%f52, %%f60\n"
|
||||
" st %%f60, [%0]\n"
|
||||
" " : : "r" (&rx), "r" (a) : QP_CLOBBER);
|
||||
r = rx);
|
||||
|
||||
return r;
|
||||
|
@ -41,10 +41,10 @@ float _Qp_qtos(const long double *a)
|
||||
FP_PACK_S(r, R);
|
||||
|
||||
QP_HANDLE_EXCEPTIONS(__asm (
|
||||
"ldd [%1], %%f52
|
||||
ldd [%1+8], %%f54
|
||||
fqtos %%f52, %0
|
||||
" : "=&f" (r) : "r" (a) : QP_CLOBBER));
|
||||
" ldd [%1], %%f52\n"
|
||||
" ldd [%1+8], %%f54\n"
|
||||
" fqtos %%f52, %0\n"
|
||||
" " : "=&f" (r) : "r" (a) : QP_CLOBBER));
|
||||
|
||||
return r;
|
||||
}
|
||||
|
@ -36,11 +36,11 @@ unsigned int _Qp_qtoui(const long double *a)
|
||||
QP_HANDLE_EXCEPTIONS(
|
||||
int rx;
|
||||
__asm (
|
||||
"ldd [%1], %%f52
|
||||
ldd [%1+8], %%f54
|
||||
fqtoi %%f52, %%f60
|
||||
st %%f60, [%0]
|
||||
" : : "r" (&rx), "r" (a) : QP_CLOBBER);
|
||||
" ldd [%1], %%f52\n"
|
||||
" ldd [%1+8], %%f54\n"
|
||||
" fqtoi %%f52, %%f60\n"
|
||||
" st %%f60, [%0]\n"
|
||||
" " : : "r" (&rx), "r" (a) : QP_CLOBBER);
|
||||
r = rx);
|
||||
|
||||
return r;
|
||||
|
@ -36,11 +36,11 @@ unsigned long _Qp_qtoux(const long double *a)
|
||||
QP_HANDLE_EXCEPTIONS(
|
||||
unsigned long rx;
|
||||
__asm (
|
||||
"ldd [%1], %%f52
|
||||
ldd [%1+8], %%f54
|
||||
fqtoi %%f52, %%f60
|
||||
std %%f60, [%0]
|
||||
" : : "r" (&rx), "r" (a) : QP_CLOBBER);
|
||||
" ldd [%1], %%f52\n"
|
||||
" ldd [%1+8], %%f54\n"
|
||||
" fqtoi %%f52, %%f60\n"
|
||||
" std %%f60, [%0]\n"
|
||||
" " : : "r" (&rx), "r" (a) : QP_CLOBBER);
|
||||
r = rx);
|
||||
|
||||
return r;
|
||||
|
@ -36,11 +36,11 @@ long _Qp_qtox(const long double *a)
|
||||
QP_HANDLE_EXCEPTIONS(
|
||||
long rx;
|
||||
__asm (
|
||||
"ldd [%1], %%f52
|
||||
ldd [%1+8], %%f54
|
||||
fqtoi %%f52, %%f60
|
||||
std %%f60, [%0]
|
||||
" : : "r" (&rx), "r" (a) : QP_CLOBBER);
|
||||
" ldd [%1], %%f52\n"
|
||||
" ldd [%1+8], %%f54\n"
|
||||
" fqtoi %%f52, %%f60\n"
|
||||
" std %%f60, [%0]\n"
|
||||
" " : : "r" (&rx), "r" (a) : QP_CLOBBER);
|
||||
r = rx);
|
||||
|
||||
return r;
|
||||
|
@ -33,10 +33,10 @@ void _Qp_sqrt(long double *c, const long double *a)
|
||||
FP_SQRT_Q(C, A);
|
||||
FP_PACK_QP(c, C);
|
||||
QP_HANDLE_EXCEPTIONS(__asm (
|
||||
"ldd [%1], %%f52
|
||||
ldd [%1+8], %%f54
|
||||
fsqrtq %%f52, %%f60
|
||||
std %%f60, [%0]
|
||||
std %%f62, [%0+8]
|
||||
" : : "r" (c), "r" (a) : QP_CLOBBER));
|
||||
" ldd [%1], %%f52\n"
|
||||
" ldd [%1+8], %%f54\n"
|
||||
" fsqrtq %%f52, %%f60\n"
|
||||
" std %%f60, [%0]\n"
|
||||
" std %%f62, [%0+8]\n"
|
||||
" " : : "r" (c), "r" (a) : QP_CLOBBER));
|
||||
}
|
||||
|
@ -39,8 +39,8 @@ void _Qp_stoq(long double *c, const float a)
|
||||
#endif
|
||||
FP_PACK_QP(c, C);
|
||||
QP_HANDLE_EXCEPTIONS(__asm (
|
||||
"fstoq %1, %%f60
|
||||
std %%f60, [%0]
|
||||
std %%f62, [%0+8]
|
||||
" : : "r" (c), "f" (a) : QP_CLOBBER));
|
||||
" fstoq %1, %%f60\n"
|
||||
" std %%f60, [%0]\n"
|
||||
" std %%f62, [%0+8]\n"
|
||||
" " : : "r" (c), "f" (a) : QP_CLOBBER));
|
||||
}
|
||||
|
@ -34,12 +34,12 @@ void _Qp_sub(long double *c, const long double *a, const long double *b)
|
||||
FP_SUB_Q(C, A, B);
|
||||
FP_PACK_QP(c, C);
|
||||
QP_HANDLE_EXCEPTIONS(__asm (
|
||||
"ldd [%1], %%f52
|
||||
ldd [%1+8], %%f54
|
||||
ldd [%2], %%f56
|
||||
ldd [%2+8], %%f58
|
||||
fsubq %%f52, %%f56, %%f60
|
||||
std %%f60, [%0]
|
||||
std %%f62, [%0+8]
|
||||
" : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER));
|
||||
" ldd [%1], %%f52\n"
|
||||
" ldd [%1+8], %%f54\n"
|
||||
" ldd [%2], %%f56\n"
|
||||
" ldd [%2+8], %%f58\n"
|
||||
" fsubq %%f52, %%f56, %%f60\n"
|
||||
" std %%f60, [%0]\n"
|
||||
" std %%f62, [%0+8]\n"
|
||||
" " : : "r" (c), "r" (a), "r" (b) : QP_CLOBBER));
|
||||
}
|
||||
|
@ -111,10 +111,10 @@ do { \
|
||||
/* This is the common case, so we do it inline. \
|
||||
* We need to clear cexc bits if any. \
|
||||
*/ \
|
||||
__asm__ __volatile__("
|
||||
fzero %%f62
|
||||
faddd %%f62, %%f62, %%f62
|
||||
" : : : "f62"); \
|
||||
__asm__ __volatile__("\n" \
|
||||
" fzero %%f62\n" \
|
||||
" faddd %%f62, %%f62, %%f62\n" \
|
||||
" " : : : "f62"); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
@ -136,8 +136,8 @@ do { \
|
||||
} while (0)
|
||||
|
||||
#define QP_NO_EXCEPTIONS \
|
||||
__asm ("fzero %%f62
|
||||
faddd %%f62, %%f62, %%f62" : : : "f62")
|
||||
__asm ("fzero %%f62\n" \
|
||||
" faddd %%f62, %%f62, %%f62" : : : "f62")
|
||||
|
||||
#define QP_CLOBBER "memory", "f52", "f54", "f56", "f58", "f60", "f62"
|
||||
#define QP_CLOBBER_CC QP_CLOBBER , "cc"
|
||||
|
Loading…
Reference in New Issue
Block a user