mirror of
https://review.haiku-os.org/buildtools
synced 2025-02-12 08:47:41 +01:00
Updated dependencies: * GMP 6.2.1 * ISL 0.24 * MPL 1.2.1 * MPFR 4.1.0 The dependencies were pulled in by running the ./contrib/download_prerequisites script and then manually removing the symbolic links and archives, and renaming the directories (i.e mv isl-0.24 to isl)
124 lines
3.6 KiB
C
124 lines
3.6 KiB
C
/* copy_parameter.c -- Copy of an input parameter into a parameter reused for
|
|
output.
|
|
|
|
Copyright (C) 2012, 2013, 2014 INRIA
|
|
|
|
This file is part of GNU MPC.
|
|
|
|
GNU MPC is free software; you can redistribute it and/or modify it under
|
|
the terms of the GNU Lesser General Public License as published by the
|
|
Free Software Foundation; either version 3 of the License, or (at your
|
|
option) any later version.
|
|
|
|
GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
|
|
more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
|
along with this program. If not, see http://www.gnu.org/licenses/ .
|
|
*/
|
|
|
|
#include "mpc-tests.h"
|
|
|
|
int
|
|
copy_parameter (mpc_fun_param_t *params, int index_dest, int index_src)
|
|
{
|
|
mpfr_prec_t pre1, pim1;
|
|
mpfr_prec_t pre2, pim2;
|
|
int index_ref;
|
|
|
|
if (params->T[index_src] != params->T[index_dest])
|
|
{
|
|
fprintf (stderr, "copy_parameter: types of parameters don't match.\n");
|
|
exit (1);
|
|
}
|
|
|
|
switch (params->T[index_src])
|
|
{
|
|
case NATIVE_INT:
|
|
tpl_copy_int (¶ms->P[index_dest].i, ¶ms->P[index_src].i);
|
|
return 0;
|
|
case NATIVE_UL:
|
|
tpl_copy_ui (¶ms->P[index_dest].ui, ¶ms->P[index_src].ui);
|
|
return 0;
|
|
case NATIVE_L:
|
|
tpl_copy_si (¶ms->P[index_dest].si, ¶ms->P[index_src].si);
|
|
return 0;
|
|
case NATIVE_D:
|
|
tpl_copy_d (¶ms->P[index_dest].d, ¶ms->P[index_src].d);
|
|
return 0;
|
|
|
|
case NATIVE_LD:
|
|
/* TODO */
|
|
fprintf (stderr, "copy_parameter: type not implemented.\n");
|
|
exit (1);
|
|
break;
|
|
|
|
case NATIVE_DC:
|
|
case NATIVE_LDC:
|
|
#ifdef _Complex_I
|
|
/* TODO */
|
|
fprintf (stderr, "copy_parameter: type not implemented.\n");
|
|
exit (1);
|
|
#endif
|
|
break;
|
|
|
|
case NATIVE_IM:
|
|
case NATIVE_UIM:
|
|
#ifdef _MPC_H_HAVE_INTMAX_T
|
|
/* TODO */
|
|
fprintf (stderr, "copy_parameter: type not implemented.\n");
|
|
exit (1);
|
|
#endif
|
|
break;
|
|
|
|
case GMP_Z:
|
|
mpz_set (params->P[index_dest].mpz, params->P[index_src].mpz);
|
|
return 0;
|
|
case GMP_Q:
|
|
mpq_set (params->P[index_dest].mpq, params->P[index_src].mpq);
|
|
return 0;
|
|
case GMP_F:
|
|
mpf_set (params->P[index_dest].mpf, params->P[index_src].mpf);
|
|
return 0;
|
|
|
|
case MPFR:
|
|
/* need same precision between source, destination, and reference */
|
|
pre1 = mpfr_get_prec (params->P[index_dest].mpfr);
|
|
pre2 = mpfr_get_prec (params->P[index_src].mpfr);
|
|
index_ref = index_dest + params->nbout + params->nbin;
|
|
if (pre1 != pre2
|
|
|| pre1 != mpfr_get_prec (params->P[index_ref].mpfr))
|
|
return -1;
|
|
|
|
tpl_copy_mpfr (params->P[index_dest].mpfr, params->P[index_src].mpfr);
|
|
return 0;
|
|
|
|
case MPC:
|
|
mpc_get_prec2 (&pre1, &pim1, params->P[index_dest].mpc);
|
|
/* check same precision between source and destination */
|
|
mpc_get_prec2 (&pre2, &pim2, params->P[index_src].mpc);
|
|
if (pre1 != pre2 || pim1 != pim2)
|
|
return -1;
|
|
/* check same precision between source and reference */
|
|
index_ref = index_dest + params->nbout + params->nbin;
|
|
mpc_get_prec2 (&pre2, &pim2, params->P[index_ref].mpc);
|
|
if (pre1 != pre2 || pim1 != pim2)
|
|
return -1;
|
|
|
|
tpl_copy_mpc (params->P[index_dest].mpc, params->P[index_src].mpc);
|
|
return 0;
|
|
|
|
case NATIVE_STRING:
|
|
case MPFR_INEX: case MPFR_RND:
|
|
case MPC_INEX: case MPC_RND:
|
|
case MPCC_INEX:
|
|
/* no supported copy */
|
|
break;
|
|
}
|
|
|
|
fprintf (stderr, "copy_parameter: unsupported type.\n");
|
|
exit (1);
|
|
}
|