Import Upstream version 20180207
[hcoop/debian/mlton.git] / runtime / basis / IntInf / int-inf.c
CommitLineData
7f918cf1
CE
1#define MLTON_GC_INTERNAL_TYPES
2#define MLTON_GC_INTERNAL_BASIS
3#include "platform.h"
4
5
6PRIVATE objptr IntInf_add (GC_state s, objptr lhs, objptr rhs, size_t bytes);
7PRIVATE objptr IntInf_andb (GC_state s, objptr lhs, objptr rhs, size_t bytes);
8PRIVATE objptr IntInf_gcd (GC_state s, objptr lhs, objptr rhs, size_t bytes);
9PRIVATE objptr IntInf_mul (GC_state s, objptr lhs, objptr rhs, size_t bytes);
10PRIVATE objptr IntInf_quot (GC_state s, objptr lhs, objptr rhs, size_t bytes);
11PRIVATE objptr IntInf_orb (GC_state s, objptr lhs, objptr rhs, size_t bytes);
12PRIVATE objptr IntInf_rem (GC_state s, objptr lhs, objptr rhs, size_t bytes);
13PRIVATE objptr IntInf_sub (GC_state s, objptr lhs, objptr rhs, size_t bytes);
14PRIVATE objptr IntInf_xorb (GC_state s, objptr lhs, objptr rhs, size_t bytes);
15PRIVATE objptr IntInf_neg (GC_state s, objptr arg, size_t bytes);
16PRIVATE objptr IntInf_notb (GC_state s, objptr arg, size_t bytes);
17PRIVATE objptr IntInf_arshift (GC_state s, objptr arg, Word32_t shift, size_t bytes);
18PRIVATE objptr IntInf_lshift (GC_state s, objptr arg, Word32_t shift, size_t bytes);
19PRIVATE Int32_t IntInf_compare (GC_state s, objptr lhs, objptr rhs);
20PRIVATE objptr IntInf_toString (GC_state s, objptr arg, Int32_t base, size_t bytes);
21
22
23objptr IntInf_add (GC_state s, objptr lhs, objptr rhs, size_t bytes) {
24 if (DEBUG_INT_INF)
25 fprintf (stderr, "IntInf_add ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n",
26 lhs, rhs, (uintmax_t)bytes);
27 return IntInf_binop (s, lhs, rhs, bytes, &mpz_add);
28}
29
30objptr IntInf_andb (GC_state s, objptr lhs, objptr rhs, size_t bytes) {
31 if (DEBUG_INT_INF)
32 fprintf (stderr, "IntInf_andb ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n",
33 lhs, rhs, (uintmax_t)bytes);
34 return IntInf_binop (s, lhs, rhs, bytes, &mpz_and);
35}
36
37objptr IntInf_gcd (GC_state s, objptr lhs, objptr rhs, size_t bytes) {
38 if (DEBUG_INT_INF)
39 fprintf (stderr, "IntInf_gcd ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n",
40 lhs, rhs, (uintmax_t)bytes);
41 return IntInf_binop (s, lhs, rhs, bytes, &mpz_gcd);
42}
43
44objptr IntInf_mul (GC_state s, objptr lhs, objptr rhs, size_t bytes) {
45 if (DEBUG_INT_INF)
46 fprintf (stderr, "IntInf_mul ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n",
47 lhs, rhs, (uintmax_t)bytes);
48 return IntInf_binop (s, lhs, rhs, bytes, &mpz_mul);
49}
50
51objptr IntInf_quot (GC_state s, objptr lhs, objptr rhs, size_t bytes) {
52 if (DEBUG_INT_INF)
53 fprintf (stderr, "IntInf_quot ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n",
54 lhs, rhs, (uintmax_t)bytes);
55 return IntInf_binop (s, lhs, rhs, bytes, &mpz_tdiv_q);
56}
57
58objptr IntInf_orb (GC_state s, objptr lhs, objptr rhs, size_t bytes) {
59 if (DEBUG_INT_INF)
60 fprintf (stderr, "IntInf_orb ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n",
61 lhs, rhs, (uintmax_t)bytes);
62 return IntInf_binop (s, lhs, rhs, bytes, &mpz_ior);
63}
64
65objptr IntInf_rem (GC_state s, objptr lhs, objptr rhs, size_t bytes) {
66 if (DEBUG_INT_INF)
67 fprintf (stderr, "IntInf_quot ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n",
68 lhs, rhs, (uintmax_t)bytes);
69 return IntInf_binop (s, lhs, rhs, bytes, &mpz_tdiv_r);
70}
71
72objptr IntInf_sub (GC_state s, objptr lhs, objptr rhs, size_t bytes) {
73 if (DEBUG_INT_INF)
74 fprintf (stderr, "IntInf_sub ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n",
75 lhs, rhs, (uintmax_t)bytes);
76 return IntInf_binop (s, lhs, rhs, bytes, &mpz_sub);
77}
78
79objptr IntInf_xorb (GC_state s, objptr lhs, objptr rhs, size_t bytes) {
80 if (DEBUG_INT_INF)
81 fprintf (stderr, "IntInf_xorb ("FMTOBJPTR", "FMTOBJPTR", %"PRIuMAX")\n",
82 lhs, rhs, (uintmax_t)bytes);
83 return IntInf_binop (s, lhs, rhs, bytes, &mpz_xor);
84}
85
86
87objptr IntInf_neg (GC_state s, objptr arg, size_t bytes) {
88 if (DEBUG_INT_INF)
89 fprintf (stderr, "IntInf_neg ("FMTOBJPTR", %"PRIuMAX")\n",
90 arg, (uintmax_t)bytes);
91 return IntInf_unop (s, arg, bytes, &mpz_neg);
92}
93
94objptr IntInf_notb (GC_state s, objptr arg, size_t bytes) {
95 if (DEBUG_INT_INF)
96 fprintf (stderr, "IntInf_notb ("FMTOBJPTR", %"PRIuMAX")\n",
97 arg, (uintmax_t)bytes);
98 return IntInf_unop (s, arg, bytes, &mpz_com);
99}
100
101
102objptr IntInf_arshift (GC_state s, objptr arg, Word32_t shift, size_t bytes) {
103 if (DEBUG_INT_INF)
104 fprintf (stderr, "IntInf_arshift ("FMTOBJPTR", %"PRIu32", %"PRIuMAX")\n",
105 arg, shift, (uintmax_t)bytes);
106 return IntInf_shop (s, arg, shift, bytes, &mpz_fdiv_q_2exp);
107}
108
109objptr IntInf_lshift (GC_state s, objptr arg, Word32_t shift, size_t bytes) {
110 if (DEBUG_INT_INF)
111 fprintf (stderr, "IntInf_lshift ("FMTOBJPTR", %"PRIu32", %"PRIuMAX")\n",
112 arg, shift, (uintmax_t)bytes);
113 return IntInf_shop (s, arg, shift, bytes, &mpz_mul_2exp);
114}
115
116
117Int32_t IntInf_compare (GC_state s, objptr lhs, objptr rhs) {
118 if (DEBUG_INT_INF)
119 fprintf (stderr, "IntInf_compare ("FMTOBJPTR", "FMTOBJPTR")\n",
120 lhs, rhs);
121 return IntInf_cmpop (s, lhs, rhs, &mpz_cmp);
122}
123
124
125objptr IntInf_toString (GC_state s, objptr arg, Int32_t base, size_t bytes) {
126 if (DEBUG_INT_INF)
127 fprintf (stderr, "IntInf_toString ("FMTOBJPTR", %"PRId32", %"PRIuMAX")\n",
128 arg, base, (uintmax_t)bytes);
129 return IntInf_strop (s, arg, base, bytes, &mpz_get_str);
130}