mpsignal.c 21 KB

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