函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:lib\mpi\mpih-div.c Create Date:2022-07-27 08:17:39
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:Divide num (NP/NSIZE) by den (DP/DSIZE) and write* the NSIZE-DSIZE least significant quotient limbs at QP* and the DSIZE long remainder at NP. If QEXTRA_LIMBS is* non-zero, generate that many fraction bits and append them after the* other quotient limbs.

函数原型:mpi_limb_t mpihelp_divrem(mpi_ptr_t qp, mpi_size_t qextra_limbs, mpi_ptr_t np, mpi_size_t nsize, mpi_ptr_t dp, mpi_size_t dsize)

返回类型:mpi_limb_t

参数:

类型参数名称
mpi_ptr_tqp
mpi_size_tqextra_limbs
mpi_ptr_tnp
mpi_size_tnsize
mpi_ptr_tdp
mpi_size_tdsize
48  most_significant_q_limb等于0
51  :dsize恒等于0
58  返回:1除dsize
60  :dsize恒等于1
66  d等于dp[0]
67  n1等于np[nsize - 1]
69  如果n1大于等于d
70  n1减等于d
74  qp加等于qextra_limbs
75 i大于等于0循环udiv_qrnnd(qp[i], n1, n1, np[i], d)
77  qp减等于qextra_limbs
79 i大于等于0循环udiv_qrnnd(qp[i], n1, n1, 0, d)
82  np[0]等于n1
84  退出
86  :dsize恒等于2
92  np加等于nsize减2
93  d1等于dp[1]
94  d0等于dp[0]
95  n1等于np[1]
96  n0等于np[0]
98  如果n1大于等于d1n1大于d1n0大于等于d0的值则
99  sub_ddmmss(n1, n0, n1, n0, d1, d0)
103 i大于等于0循环
107  如果i大于等于qextra_limbsnp自减
109  否则np[0]等于0
112  如果n1恒等于d1
116  q等于0的反
118  r等于n0d1
119  如果r小于d1
122  qp[i]等于q
123  继续下一循环
125  n1等于d0减如果d0不等于0则1否则0
126  n0等于负d0
127  否则
128  udiv_qrnnd(q, r, n1, n0, d1)
129  umul_ppmm(n1, n0, d0, q)
132  n2等于np[0]
133  q_test :
134  如果n1大于rn1恒等于rn0大于n2
136  q自减
137  sub_ddmmss(n1, n0, n1, n0, 0, d0)
138  r加等于d1
139  如果r大于等于d1则转到:q_test
143  qp[i]等于q
144  sub_ddmmss(n1, n0, r, n2, n1, n0)
146  np[1]等于n1
147  np[0]等于n0
149  退出
151  默认
156  np加等于nsizedsize
157  dX等于dp[dsize - 1]
158  d1等于dp[dsize - 2]
159  n0等于np[dsize - 1]
161  如果n0大于等于dX
162  如果n0大于dXmpi比较大于等于0则
164  mpihelp_sub_n(np, np, dp, dsize)
165  n0等于np[dsize - 1]
170 i大于等于0循环
175  如果i大于等于qextra_limbs
176  np自减
177  n2等于np[dsize]
178  否则
179  n2等于np[dsize - 1]
180  MPN_COPY_DECR(np + 1, np, dsize - 1)
181  np[0]等于0
184  如果n0恒等于dX
187  q等于0的反
188  否则
191  udiv_qrnnd(q, r, n0, np[dsize - 1], dX)
192  umul_ppmm(n1, n0, d1, q)
194 n1大于rn1恒等于rn0大于np[dsize - 2]循环
197  q自减
198  r加等于dX
199  如果r小于dX退出
201  n1减等于n0小于d1
202  n0减等于d1
209  cy_limb等于mpihelp_submul_1(np, dp, dsize, q)
211  如果n2不等于cy_limb
212  mpihelp_add_n(np, np, dp, dsize)
213  q自减
216  qp[i]等于q
217  n0等于np[dsize - 1]
222  返回:most_significant_q_limb
调用者
名称描述
mpi_powm异或取模