mpsignal.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967
  1. /*
  2. * Copyright (c) 2008-2016 Stefan Krah. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. *
  8. * 1. Redistributions of source code must retain the above copyright
  9. * notice, this list of conditions and the following disclaimer.
  10. *
  11. * 2. Redistributions in binary form must reproduce the above copyright
  12. * notice, this list of conditions and the following disclaimer in the
  13. * documentation and/or other materials provided with the distribution.
  14. *
  15. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
  16. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  17. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  18. * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  19. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  20. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  21. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  22. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  23. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  24. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  25. * SUCH DAMAGE.
  26. */
  27. #include "mpdecimal.h"
  28. /* Signaling wrappers for the quiet functions in mpdecimal.c. */
  29. char *
  30. mpd_format(const mpd_t *dec, const char *fmt, mpd_context_t *ctx)
  31. {
  32. char *ret;
  33. uint32_t status = 0;
  34. ret = mpd_qformat(dec, fmt, ctx, &status);
  35. mpd_addstatus_raise(ctx, status);
  36. return ret;
  37. }
  38. void
  39. mpd_import_u16(mpd_t *result, const uint16_t *srcdata, size_t srclen,
  40. uint8_t srcsign, uint32_t base, mpd_context_t *ctx)
  41. {
  42. uint32_t status = 0;
  43. mpd_qimport_u16(result, srcdata, srclen, srcsign, base, ctx, &status);
  44. mpd_addstatus_raise(ctx, status);
  45. }
  46. void
  47. mpd_import_u32(mpd_t *result, const uint32_t *srcdata, size_t srclen,
  48. uint8_t srcsign, uint32_t base, mpd_context_t *ctx)
  49. {
  50. uint32_t status = 0;
  51. mpd_qimport_u32(result, srcdata, srclen, srcsign, base, ctx, &status);
  52. mpd_addstatus_raise(ctx, status);
  53. }
  54. size_t
  55. mpd_export_u16(uint16_t **rdata, size_t rlen, uint32_t base, const mpd_t *src,
  56. mpd_context_t *ctx)
  57. {
  58. size_t n;
  59. uint32_t status = 0;
  60. n = mpd_qexport_u16(rdata, rlen, base, src, &status);
  61. mpd_addstatus_raise(ctx, status);
  62. return n;
  63. }
  64. size_t
  65. mpd_export_u32(uint32_t **rdata, size_t rlen, uint32_t base, const mpd_t *src,
  66. mpd_context_t *ctx)
  67. {
  68. size_t n;
  69. uint32_t status = 0;
  70. n = mpd_qexport_u32(rdata, rlen, base, src, &status);
  71. mpd_addstatus_raise(ctx, status);
  72. return n;
  73. }
  74. void
  75. mpd_finalize(mpd_t *result, mpd_context_t *ctx)
  76. {
  77. uint32_t status = 0;
  78. mpd_qfinalize(result, ctx, &status);
  79. mpd_addstatus_raise(ctx, status);
  80. }
  81. int
  82. mpd_check_nan(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  83. {
  84. uint32_t status = 0;
  85. if (mpd_qcheck_nan(result, a, ctx, &status)) {
  86. mpd_addstatus_raise(ctx, status);
  87. return 1;
  88. }
  89. return 0;
  90. }
  91. int
  92. mpd_check_nans(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  93. {
  94. uint32_t status = 0;
  95. if (mpd_qcheck_nans(result, a, b, ctx, &status)) {
  96. mpd_addstatus_raise(ctx, status);
  97. return 1;
  98. }
  99. return 0;
  100. }
  101. void
  102. mpd_set_string(mpd_t *result, const char *s, mpd_context_t *ctx)
  103. {
  104. uint32_t status = 0;
  105. mpd_qset_string(result, s, ctx, &status);
  106. mpd_addstatus_raise(ctx, status);
  107. }
  108. void
  109. mpd_maxcoeff(mpd_t *result, mpd_context_t *ctx)
  110. {
  111. uint32_t status = 0;
  112. mpd_qmaxcoeff(result, ctx, &status);
  113. mpd_addstatus_raise(ctx, status);
  114. }
  115. /* set static mpd from signed integer */
  116. void
  117. mpd_sset_ssize(mpd_t *result, mpd_ssize_t a, mpd_context_t *ctx)
  118. {
  119. uint32_t status = 0;
  120. mpd_qsset_ssize(result, a, ctx, &status);
  121. mpd_addstatus_raise(ctx, status);
  122. }
  123. void
  124. mpd_sset_i32(mpd_t *result, int32_t a, mpd_context_t *ctx)
  125. {
  126. uint32_t status = 0;
  127. mpd_qsset_i32(result, a, ctx, &status);
  128. mpd_addstatus_raise(ctx, status);
  129. }
  130. #ifdef CONFIG_64
  131. void
  132. mpd_sset_i64(mpd_t *result, int64_t a, mpd_context_t *ctx)
  133. {
  134. uint32_t status = 0;
  135. mpd_qsset_i64(result, a, ctx, &status);
  136. mpd_addstatus_raise(ctx, status);
  137. }
  138. #endif
  139. /* set static mpd from unsigned integer */
  140. void
  141. mpd_sset_uint(mpd_t *result, mpd_uint_t a, mpd_context_t *ctx)
  142. {
  143. uint32_t status = 0;
  144. mpd_qsset_uint(result, a, ctx, &status);
  145. mpd_addstatus_raise(ctx, status);
  146. }
  147. void
  148. mpd_sset_u32(mpd_t *result, uint32_t a, mpd_context_t *ctx)
  149. {
  150. uint32_t status = 0;
  151. mpd_qsset_u32(result, a, ctx, &status);
  152. mpd_addstatus_raise(ctx, status);
  153. }
  154. #ifdef CONFIG_64
  155. void
  156. mpd_sset_u64(mpd_t *result, uint64_t a, mpd_context_t *ctx)
  157. {
  158. uint32_t status = 0;
  159. mpd_qsset_u64(result, a, ctx, &status);
  160. mpd_addstatus_raise(ctx, status);
  161. }
  162. #endif
  163. /* set mpd from signed integer */
  164. void
  165. mpd_set_ssize(mpd_t *result, mpd_ssize_t a, mpd_context_t *ctx)
  166. {
  167. uint32_t status = 0;
  168. mpd_qset_ssize(result, a, ctx, &status);
  169. mpd_addstatus_raise(ctx, status);
  170. }
  171. void
  172. mpd_set_i32(mpd_t *result, int32_t a, mpd_context_t *ctx)
  173. {
  174. uint32_t status = 0;
  175. mpd_qset_i32(result, a, ctx, &status);
  176. mpd_addstatus_raise(ctx, status);
  177. }
  178. #ifndef LEGACY_COMPILER
  179. void
  180. mpd_set_i64(mpd_t *result, int64_t a, mpd_context_t *ctx)
  181. {
  182. uint32_t status = 0;
  183. mpd_qset_i64(result, a, ctx, &status);
  184. mpd_addstatus_raise(ctx, status);
  185. }
  186. #endif
  187. /* set mpd from unsigned integer */
  188. void
  189. mpd_set_uint(mpd_t *result, mpd_uint_t a, mpd_context_t *ctx)
  190. {
  191. uint32_t status = 0;
  192. mpd_qset_uint(result, a, ctx, &status);
  193. mpd_addstatus_raise(ctx, status);
  194. }
  195. void
  196. mpd_set_u32(mpd_t *result, uint32_t a, mpd_context_t *ctx)
  197. {
  198. uint32_t status = 0;
  199. mpd_qset_u32(result, a, ctx, &status);
  200. mpd_addstatus_raise(ctx, status);
  201. }
  202. #ifndef LEGACY_COMPILER
  203. void
  204. mpd_set_u64(mpd_t *result, uint64_t a, mpd_context_t *ctx)
  205. {
  206. uint32_t status = 0;
  207. mpd_qset_u64(result, a, ctx, &status);
  208. mpd_addstatus_raise(ctx, status);
  209. }
  210. #endif
  211. /* convert mpd to signed integer */
  212. mpd_ssize_t
  213. mpd_get_ssize(const mpd_t *a, mpd_context_t *ctx)
  214. {
  215. uint32_t status = 0;
  216. mpd_ssize_t ret;
  217. ret = mpd_qget_ssize(a, &status);
  218. mpd_addstatus_raise(ctx, status);
  219. return ret;
  220. }
  221. int32_t
  222. mpd_get_i32(const mpd_t *a, mpd_context_t *ctx)
  223. {
  224. uint32_t status = 0;
  225. int32_t ret;
  226. ret = mpd_qget_i32(a, &status);
  227. mpd_addstatus_raise(ctx, status);
  228. return ret;
  229. }
  230. #ifndef LEGACY_COMPILER
  231. int64_t
  232. mpd_get_i64(const mpd_t *a, mpd_context_t *ctx)
  233. {
  234. uint32_t status = 0;
  235. int64_t ret;
  236. ret = mpd_qget_i64(a, &status);
  237. mpd_addstatus_raise(ctx, status);
  238. return ret;
  239. }
  240. #endif
  241. mpd_uint_t
  242. mpd_get_uint(const mpd_t *a, mpd_context_t *ctx)
  243. {
  244. uint32_t status = 0;
  245. mpd_uint_t ret;
  246. ret = mpd_qget_uint(a, &status);
  247. mpd_addstatus_raise(ctx, status);
  248. return ret;
  249. }
  250. mpd_uint_t
  251. mpd_abs_uint(const mpd_t *a, mpd_context_t *ctx)
  252. {
  253. uint32_t status = 0;
  254. mpd_uint_t ret;
  255. ret = mpd_qabs_uint(a, &status);
  256. mpd_addstatus_raise(ctx, status);
  257. return ret;
  258. }
  259. uint32_t
  260. mpd_get_u32(const mpd_t *a, mpd_context_t *ctx)
  261. {
  262. uint32_t status = 0;
  263. uint32_t ret;
  264. ret = mpd_qget_u32(a, &status);
  265. mpd_addstatus_raise(ctx, status);
  266. return ret;
  267. }
  268. #ifndef LEGACY_COMPILER
  269. uint64_t
  270. mpd_get_u64(const mpd_t *a, mpd_context_t *ctx)
  271. {
  272. uint32_t status = 0;
  273. uint64_t ret;
  274. ret = mpd_qget_u64(a, &status);
  275. mpd_addstatus_raise(ctx, status);
  276. return ret;
  277. }
  278. #endif
  279. void
  280. mpd_and(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  281. {
  282. uint32_t status = 0;
  283. mpd_qand(result, a, b, ctx, &status);
  284. mpd_addstatus_raise(ctx, status);
  285. }
  286. void
  287. mpd_copy(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  288. {
  289. uint32_t status = 0;
  290. if (!mpd_qcopy(result, a, &status)) {
  291. mpd_addstatus_raise(ctx, status);
  292. }
  293. }
  294. void
  295. mpd_canonical(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  296. {
  297. mpd_copy(result, a, ctx);
  298. }
  299. void
  300. mpd_copy_abs(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  301. {
  302. uint32_t status = 0;
  303. if (!mpd_qcopy_abs(result, a, &status)) {
  304. mpd_addstatus_raise(ctx, status);
  305. }
  306. }
  307. void
  308. mpd_copy_negate(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  309. {
  310. uint32_t status = 0;
  311. if (!mpd_qcopy_negate(result, a, &status)) {
  312. mpd_addstatus_raise(ctx, status);
  313. }
  314. }
  315. void
  316. mpd_copy_sign(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  317. {
  318. uint32_t status = 0;
  319. if (!mpd_qcopy_sign(result, a, b, &status)) {
  320. mpd_addstatus_raise(ctx, status);
  321. }
  322. }
  323. void
  324. mpd_invert(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  325. {
  326. uint32_t status = 0;
  327. mpd_qinvert(result, a, ctx, &status);
  328. mpd_addstatus_raise(ctx, status);
  329. }
  330. void
  331. mpd_logb(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  332. {
  333. uint32_t status = 0;
  334. mpd_qlogb(result, a, ctx, &status);
  335. mpd_addstatus_raise(ctx, status);
  336. }
  337. void
  338. mpd_or(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  339. {
  340. uint32_t status = 0;
  341. mpd_qor(result, a, b, ctx, &status);
  342. mpd_addstatus_raise(ctx, status);
  343. }
  344. void
  345. mpd_rotate(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  346. {
  347. uint32_t status = 0;
  348. mpd_qrotate(result, a, b, ctx, &status);
  349. mpd_addstatus_raise(ctx, status);
  350. }
  351. void
  352. mpd_scaleb(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  353. {
  354. uint32_t status = 0;
  355. mpd_qscaleb(result, a, b, ctx, &status);
  356. mpd_addstatus_raise(ctx, status);
  357. }
  358. void
  359. mpd_shiftl(mpd_t *result, const mpd_t *a, mpd_ssize_t n, mpd_context_t *ctx)
  360. {
  361. uint32_t status = 0;
  362. mpd_qshiftl(result, a, n, &status);
  363. mpd_addstatus_raise(ctx, status);
  364. }
  365. mpd_uint_t
  366. mpd_shiftr(mpd_t *result, const mpd_t *a, mpd_ssize_t n, mpd_context_t *ctx)
  367. {
  368. uint32_t status = 0;
  369. mpd_uint_t rnd;
  370. rnd = mpd_qshiftr(result, a, n, &status);
  371. mpd_addstatus_raise(ctx, status);
  372. return rnd;
  373. }
  374. void
  375. mpd_shiftn(mpd_t *result, const mpd_t *a, mpd_ssize_t n, mpd_context_t *ctx)
  376. {
  377. uint32_t status = 0;
  378. mpd_qshiftn(result, a, n, ctx, &status);
  379. mpd_addstatus_raise(ctx, status);
  380. }
  381. void
  382. mpd_shift(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  383. {
  384. uint32_t status = 0;
  385. mpd_qshift(result, a, b, ctx, &status);
  386. mpd_addstatus_raise(ctx, status);
  387. }
  388. void
  389. mpd_xor(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  390. {
  391. uint32_t status = 0;
  392. mpd_qxor(result, a, b, ctx, &status);
  393. mpd_addstatus_raise(ctx, status);
  394. }
  395. void
  396. mpd_abs(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  397. {
  398. uint32_t status = 0;
  399. mpd_qabs(result, a, ctx, &status);
  400. mpd_addstatus_raise(ctx, status);
  401. }
  402. int
  403. mpd_cmp(const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  404. {
  405. uint32_t status = 0;
  406. int c;
  407. c = mpd_qcmp(a, b, &status);
  408. mpd_addstatus_raise(ctx, status);
  409. return c;
  410. }
  411. int
  412. mpd_compare(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  413. {
  414. uint32_t status = 0;
  415. int c;
  416. c = mpd_qcompare(result, a, b, ctx, &status);
  417. mpd_addstatus_raise(ctx, status);
  418. return c;
  419. }
  420. int
  421. mpd_compare_signal(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  422. {
  423. uint32_t status = 0;
  424. int c;
  425. c = mpd_qcompare_signal(result, a, b, ctx, &status);
  426. mpd_addstatus_raise(ctx, status);
  427. return c;
  428. }
  429. void
  430. mpd_add(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  431. {
  432. uint32_t status = 0;
  433. mpd_qadd(result, a, b, ctx, &status);
  434. mpd_addstatus_raise(ctx, status);
  435. }
  436. void
  437. mpd_sub(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  438. {
  439. uint32_t status = 0;
  440. mpd_qsub(result, a, b, ctx, &status);
  441. mpd_addstatus_raise(ctx, status);
  442. }
  443. void
  444. mpd_add_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b, mpd_context_t *ctx)
  445. {
  446. uint32_t status = 0;
  447. mpd_qadd_ssize(result, a, b, ctx, &status);
  448. mpd_addstatus_raise(ctx, status);
  449. }
  450. void
  451. mpd_add_i32(mpd_t *result, const mpd_t *a, int32_t b, mpd_context_t *ctx)
  452. {
  453. uint32_t status = 0;
  454. mpd_qadd_i32(result, a, b, ctx, &status);
  455. mpd_addstatus_raise(ctx, status);
  456. }
  457. #ifndef LEGACY_COMPILER
  458. void
  459. mpd_add_i64(mpd_t *result, const mpd_t *a, int64_t b, mpd_context_t *ctx)
  460. {
  461. uint32_t status = 0;
  462. mpd_qadd_i64(result, a, b, ctx, &status);
  463. mpd_addstatus_raise(ctx, status);
  464. }
  465. #endif
  466. void
  467. mpd_add_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b, mpd_context_t *ctx)
  468. {
  469. uint32_t status = 0;
  470. mpd_qadd_uint(result, a, b, ctx, &status);
  471. mpd_addstatus_raise(ctx, status);
  472. }
  473. void
  474. mpd_add_u32(mpd_t *result, const mpd_t *a, uint32_t b, mpd_context_t *ctx)
  475. {
  476. uint32_t status = 0;
  477. mpd_qadd_u32(result, a, b, ctx, &status);
  478. mpd_addstatus_raise(ctx, status);
  479. }
  480. #ifndef LEGACY_COMPILER
  481. void
  482. mpd_add_u64(mpd_t *result, const mpd_t *a, uint64_t b, mpd_context_t *ctx)
  483. {
  484. uint32_t status = 0;
  485. mpd_qadd_u64(result, a, b, ctx, &status);
  486. mpd_addstatus_raise(ctx, status);
  487. }
  488. #endif
  489. void
  490. mpd_sub_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b, mpd_context_t *ctx)
  491. {
  492. uint32_t status = 0;
  493. mpd_qsub_ssize(result, a, b, ctx, &status);
  494. mpd_addstatus_raise(ctx, status);
  495. }
  496. void
  497. mpd_sub_i32(mpd_t *result, const mpd_t *a, int32_t b, mpd_context_t *ctx)
  498. {
  499. uint32_t status = 0;
  500. mpd_qsub_i32(result, a, b, ctx, &status);
  501. mpd_addstatus_raise(ctx, status);
  502. }
  503. #ifndef LEGACY_COMPILER
  504. void
  505. mpd_sub_i64(mpd_t *result, const mpd_t *a, int64_t b, mpd_context_t *ctx)
  506. {
  507. uint32_t status = 0;
  508. mpd_qsub_i64(result, a, b, ctx, &status);
  509. mpd_addstatus_raise(ctx, status);
  510. }
  511. #endif
  512. void
  513. mpd_sub_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b, mpd_context_t *ctx)
  514. {
  515. uint32_t status = 0;
  516. mpd_qsub_uint(result, a, b, ctx, &status);
  517. mpd_addstatus_raise(ctx, status);
  518. }
  519. void
  520. mpd_sub_u32(mpd_t *result, const mpd_t *a, uint32_t b, mpd_context_t *ctx)
  521. {
  522. uint32_t status = 0;
  523. mpd_qsub_u32(result, a, b, ctx, &status);
  524. mpd_addstatus_raise(ctx, status);
  525. }
  526. #ifndef LEGACY_COMPILER
  527. void
  528. mpd_sub_u64(mpd_t *result, const mpd_t *a, uint64_t b, mpd_context_t *ctx)
  529. {
  530. uint32_t status = 0;
  531. mpd_qsub_u64(result, a, b, ctx, &status);
  532. mpd_addstatus_raise(ctx, status);
  533. }
  534. #endif
  535. void
  536. mpd_div(mpd_t *q, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  537. {
  538. uint32_t status = 0;
  539. mpd_qdiv(q, a, b, ctx, &status);
  540. mpd_addstatus_raise(ctx, status);
  541. }
  542. void
  543. mpd_div_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b, mpd_context_t *ctx)
  544. {
  545. uint32_t status = 0;
  546. mpd_qdiv_ssize(result, a, b, ctx, &status);
  547. mpd_addstatus_raise(ctx, status);
  548. }
  549. void
  550. mpd_div_i32(mpd_t *result, const mpd_t *a, int32_t b, mpd_context_t *ctx)
  551. {
  552. uint32_t status = 0;
  553. mpd_qdiv_i32(result, a, b, ctx, &status);
  554. mpd_addstatus_raise(ctx, status);
  555. }
  556. #ifndef LEGACY_COMPILER
  557. void
  558. mpd_div_i64(mpd_t *result, const mpd_t *a, int64_t b, mpd_context_t *ctx)
  559. {
  560. uint32_t status = 0;
  561. mpd_qdiv_i64(result, a, b, ctx, &status);
  562. mpd_addstatus_raise(ctx, status);
  563. }
  564. #endif
  565. void
  566. mpd_div_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b, mpd_context_t *ctx)
  567. {
  568. uint32_t status = 0;
  569. mpd_qdiv_uint(result, a, b, ctx, &status);
  570. mpd_addstatus_raise(ctx, status);
  571. }
  572. void
  573. mpd_div_u32(mpd_t *result, const mpd_t *a, uint32_t b, mpd_context_t *ctx)
  574. {
  575. uint32_t status = 0;
  576. mpd_qdiv_u32(result, a, b, ctx, &status);
  577. mpd_addstatus_raise(ctx, status);
  578. }
  579. #ifndef LEGACY_COMPILER
  580. void
  581. mpd_div_u64(mpd_t *result, const mpd_t *a, uint64_t b, mpd_context_t *ctx)
  582. {
  583. uint32_t status = 0;
  584. mpd_qdiv_u64(result, a, b, ctx, &status);
  585. mpd_addstatus_raise(ctx, status);
  586. }
  587. #endif
  588. void
  589. mpd_divmod(mpd_t *q, mpd_t *r, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  590. {
  591. uint32_t status = 0;
  592. mpd_qdivmod(q, r, a, b, ctx, &status);
  593. mpd_addstatus_raise(ctx, status);
  594. }
  595. void
  596. mpd_divint(mpd_t *q, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  597. {
  598. uint32_t status = 0;
  599. mpd_qdivint(q, a, b, ctx, &status);
  600. mpd_addstatus_raise(ctx, status);
  601. }
  602. void
  603. mpd_exp(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  604. {
  605. uint32_t status = 0;
  606. mpd_qexp(result, a, ctx, &status);
  607. mpd_addstatus_raise(ctx, status);
  608. }
  609. void
  610. mpd_fma(mpd_t *result, const mpd_t *a, const mpd_t *b, const mpd_t *c,
  611. mpd_context_t *ctx)
  612. {
  613. uint32_t status = 0;
  614. mpd_qfma(result, a, b, c, ctx, &status);
  615. mpd_addstatus_raise(ctx, status);
  616. }
  617. void
  618. mpd_ln(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  619. {
  620. uint32_t status = 0;
  621. mpd_qln(result, a, ctx, &status);
  622. mpd_addstatus_raise(ctx, status);
  623. }
  624. void
  625. mpd_log10(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  626. {
  627. uint32_t status = 0;
  628. mpd_qlog10(result, a, ctx, &status);
  629. mpd_addstatus_raise(ctx, status);
  630. }
  631. void
  632. mpd_max(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  633. {
  634. uint32_t status = 0;
  635. mpd_qmax(result, a, b, ctx, &status);
  636. mpd_addstatus_raise(ctx, status);
  637. }
  638. void
  639. mpd_max_mag(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  640. {
  641. uint32_t status = 0;
  642. mpd_qmax_mag(result, a, b, ctx, &status);
  643. mpd_addstatus_raise(ctx, status);
  644. }
  645. void
  646. mpd_min(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  647. {
  648. uint32_t status = 0;
  649. mpd_qmin(result, a, b, ctx, &status);
  650. mpd_addstatus_raise(ctx, status);
  651. }
  652. void
  653. mpd_min_mag(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  654. {
  655. uint32_t status = 0;
  656. mpd_qmin_mag(result, a, b, ctx, &status);
  657. mpd_addstatus_raise(ctx, status);
  658. }
  659. void
  660. mpd_minus(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  661. {
  662. uint32_t status = 0;
  663. mpd_qminus(result, a, ctx, &status);
  664. mpd_addstatus_raise(ctx, status);
  665. }
  666. void
  667. mpd_mul(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  668. {
  669. uint32_t status = 0;
  670. mpd_qmul(result, a, b, ctx, &status);
  671. mpd_addstatus_raise(ctx, status);
  672. }
  673. void
  674. mpd_mul_ssize(mpd_t *result, const mpd_t *a, mpd_ssize_t b, mpd_context_t *ctx)
  675. {
  676. uint32_t status = 0;
  677. mpd_qmul_ssize(result, a, b, ctx, &status);
  678. mpd_addstatus_raise(ctx, status);
  679. }
  680. void
  681. mpd_mul_i32(mpd_t *result, const mpd_t *a, int32_t b, mpd_context_t *ctx)
  682. {
  683. uint32_t status = 0;
  684. mpd_qmul_i32(result, a, b, ctx, &status);
  685. mpd_addstatus_raise(ctx, status);
  686. }
  687. #ifndef LEGACY_COMPILER
  688. void
  689. mpd_mul_i64(mpd_t *result, const mpd_t *a, int64_t b, mpd_context_t *ctx)
  690. {
  691. uint32_t status = 0;
  692. mpd_qmul_i64(result, a, b, ctx, &status);
  693. mpd_addstatus_raise(ctx, status);
  694. }
  695. #endif
  696. void
  697. mpd_mul_uint(mpd_t *result, const mpd_t *a, mpd_uint_t b, mpd_context_t *ctx)
  698. {
  699. uint32_t status = 0;
  700. mpd_qmul_uint(result, a, b, ctx, &status);
  701. mpd_addstatus_raise(ctx, status);
  702. }
  703. void
  704. mpd_mul_u32(mpd_t *result, const mpd_t *a, uint32_t b, mpd_context_t *ctx)
  705. {
  706. uint32_t status = 0;
  707. mpd_qmul_u32(result, a, b, ctx, &status);
  708. mpd_addstatus_raise(ctx, status);
  709. }
  710. #ifndef LEGACY_COMPILER
  711. void
  712. mpd_mul_u64(mpd_t *result, const mpd_t *a, uint64_t b, mpd_context_t *ctx)
  713. {
  714. uint32_t status = 0;
  715. mpd_qmul_u64(result, a, b, ctx, &status);
  716. mpd_addstatus_raise(ctx, status);
  717. }
  718. #endif
  719. void
  720. mpd_next_minus(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  721. {
  722. uint32_t status = 0;
  723. mpd_qnext_minus(result, a, ctx, &status);
  724. mpd_addstatus_raise(ctx, status);
  725. }
  726. void
  727. mpd_next_plus(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  728. {
  729. uint32_t status = 0;
  730. mpd_qnext_plus(result, a, ctx, &status);
  731. mpd_addstatus_raise(ctx, status);
  732. }
  733. void
  734. mpd_next_toward(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  735. {
  736. uint32_t status = 0;
  737. mpd_qnext_toward(result, a, b, ctx, &status);
  738. mpd_addstatus_raise(ctx, status);
  739. }
  740. void
  741. mpd_plus(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  742. {
  743. uint32_t status = 0;
  744. mpd_qplus(result, a, ctx, &status);
  745. mpd_addstatus_raise(ctx, status);
  746. }
  747. void
  748. mpd_pow(mpd_t *result, const mpd_t *base, const mpd_t *exp, mpd_context_t *ctx)
  749. {
  750. uint32_t status = 0;
  751. mpd_qpow(result, base, exp, ctx, &status);
  752. mpd_addstatus_raise(ctx, status);
  753. }
  754. void
  755. mpd_powmod(mpd_t *result, const mpd_t *base, const mpd_t *exp, const mpd_t *mod,
  756. mpd_context_t *ctx)
  757. {
  758. uint32_t status = 0;
  759. mpd_qpowmod(result, base, exp, mod, ctx, &status);
  760. mpd_addstatus_raise(ctx, status);
  761. }
  762. void
  763. mpd_quantize(mpd_t *result, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  764. {
  765. uint32_t status = 0;
  766. mpd_qquantize(result, a, b, ctx, &status);
  767. mpd_addstatus_raise(ctx, status);
  768. }
  769. void
  770. mpd_rescale(mpd_t *result, const mpd_t *a, mpd_ssize_t exp, mpd_context_t *ctx)
  771. {
  772. uint32_t status = 0;
  773. mpd_qrescale(result, a, exp, ctx, &status);
  774. mpd_addstatus_raise(ctx, status);
  775. }
  776. void
  777. mpd_reduce(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  778. {
  779. uint32_t status = 0;
  780. mpd_qreduce(result, a, ctx, &status);
  781. mpd_addstatus_raise(ctx, status);
  782. }
  783. void
  784. mpd_rem(mpd_t *r, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  785. {
  786. uint32_t status = 0;
  787. mpd_qrem(r, a, b, ctx, &status);
  788. mpd_addstatus_raise(ctx, status);
  789. }
  790. void
  791. mpd_rem_near(mpd_t *r, const mpd_t *a, const mpd_t *b, mpd_context_t *ctx)
  792. {
  793. uint32_t status = 0;
  794. mpd_qrem_near(r, a, b, ctx, &status);
  795. mpd_addstatus_raise(ctx, status);
  796. }
  797. void
  798. mpd_round_to_intx(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  799. {
  800. uint32_t status = 0;
  801. mpd_qround_to_intx(result, a, ctx, &status);
  802. mpd_addstatus_raise(ctx, status);
  803. }
  804. void
  805. mpd_round_to_int(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  806. {
  807. uint32_t status = 0;
  808. mpd_qround_to_int(result, a, ctx, &status);
  809. mpd_addstatus_raise(ctx, status);
  810. }
  811. void
  812. mpd_trunc(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  813. {
  814. uint32_t status = 0;
  815. mpd_qtrunc(result, a, ctx, &status);
  816. mpd_addstatus_raise(ctx, status);
  817. }
  818. void
  819. mpd_floor(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  820. {
  821. uint32_t status = 0;
  822. mpd_qfloor(result, a, ctx, &status);
  823. mpd_addstatus_raise(ctx, status);
  824. }
  825. void
  826. mpd_ceil(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  827. {
  828. uint32_t status = 0;
  829. mpd_qceil(result, a, ctx, &status);
  830. mpd_addstatus_raise(ctx, status);
  831. }
  832. void
  833. mpd_sqrt(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  834. {
  835. uint32_t status = 0;
  836. mpd_qsqrt(result, a, ctx, &status);
  837. mpd_addstatus_raise(ctx, status);
  838. }
  839. void
  840. mpd_invroot(mpd_t *result, const mpd_t *a, mpd_context_t *ctx)
  841. {
  842. uint32_t status = 0;
  843. mpd_qinvroot(result, a, ctx, &status);
  844. mpd_addstatus_raise(ctx, status);
  845. }