⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aors.h

📁 tpm-emulator 0.1版本tpm芯片的软件模拟版本
💻 H
字号:
/* mpz_add, mpz_sub -- add or subtract integers.Copyright 1991, 1993, 1994, 1996, 2000, 2001 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 modifyit under the terms of the GNU Lesser General Public License as published bythe Free Software Foundation; either version 2.1 of the License, or (at youroption) any later version.The GNU MP Library is distributed in the hope that it will be useful, butWITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITYor FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General PublicLicense for more details.You should have received a copy of the GNU Lesser General Public Licensealong with the GNU MP Library; see the file COPYING.LIB.  If not, write tothe Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,MA 02111-1307, USA. */#include "gmp.h"#include "gmp-impl.h"#ifdef BERKELEY_MP#include "mp.h"#ifdef OPERATION_add#define FUNCTION     madd#define VARIATION#endif#ifdef OPERATION_sub#define FUNCTION     msub#define VARIATION    -#endif#define ARGUMENTS    mpz_srcptr u, mpz_srcptr v, mpz_ptr w#else /* normal GMP */#ifdef OPERATION_add#define FUNCTION     mpz_add#define VARIATION#endif#ifdef OPERATION_sub#define FUNCTION     mpz_sub#define VARIATION    -#endif#define ARGUMENTS    mpz_ptr w, mpz_srcptr u, mpz_srcptr v#endif#ifndef FUNCTIONError, need OPERATION_add or OPERATION_sub#endifvoidFUNCTION (ARGUMENTS){  mp_srcptr up, vp;  mp_ptr wp;  mp_size_t usize, vsize, wsize;  mp_size_t abs_usize;  mp_size_t abs_vsize;  usize = u->_mp_size;  vsize = VARIATION v->_mp_size;  abs_usize = ABS (usize);  abs_vsize = ABS (vsize);  if (abs_usize < abs_vsize)    {      /* Swap U and V. */      MPZ_SRCPTR_SWAP (u, v);      MP_SIZE_T_SWAP (usize, vsize);      MP_SIZE_T_SWAP (abs_usize, abs_vsize);    }  /* True: ABS_USIZE >= ABS_VSIZE.  */  /* If not space for w (and possible carry), increase space.  */  wsize = abs_usize + 1;  if (w->_mp_alloc < wsize)    _mpz_realloc (w, wsize);  /* These must be after realloc (u or v may be the same as w).  */  up = u->_mp_d;  vp = v->_mp_d;  wp = w->_mp_d;  if ((usize ^ vsize) < 0)    {      /* U and V have different sign.  Need to compare them to determine	 which operand to subtract from which.  */      /* This test is right since ABS_USIZE >= ABS_VSIZE.  */      if (abs_usize != abs_vsize)	{	  mpn_sub (wp, up, abs_usize, vp, abs_vsize);	  wsize = abs_usize;	  MPN_NORMALIZE (wp, wsize);	  if (usize < 0)	    wsize = -wsize;	}      else if (mpn_cmp (up, vp, abs_usize) < 0)	{	  mpn_sub_n (wp, vp, up, abs_usize);	  wsize = abs_usize;	  MPN_NORMALIZE (wp, wsize);	  if (usize >= 0)	    wsize = -wsize;	}      else	{	  mpn_sub_n (wp, up, vp, abs_usize);	  wsize = abs_usize;	  MPN_NORMALIZE (wp, wsize);	  if (usize < 0)	    wsize = -wsize;	}    }  else    {      /* U and V have same sign.  Add them.  */      mp_limb_t cy_limb = mpn_add (wp, up, abs_usize, vp, abs_vsize);      wp[abs_usize] = cy_limb;      wsize = abs_usize + cy_limb;      if (usize < 0)	wsize = -wsize;    }  w->_mp_size = wsize;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -