Import Upstream version 20180207
[hcoop/debian/mlton.git] / runtime / basis / IntInf / int-inf.c
1 #define MLTON_GC_INTERNAL_TYPES
2 #define MLTON_GC_INTERNAL_BASIS
3 #include "platform.h"
4
5
6 PRIVATE objptr IntInf_add (GC_state s, objptr lhs, objptr rhs, size_t bytes);
7 PRIVATE objptr IntInf_andb (GC_state s, objptr lhs, objptr rhs, size_t bytes);
8 PRIVATE objptr IntInf_gcd (GC_state s, objptr lhs, objptr rhs, size_t bytes);
9 PRIVATE objptr IntInf_mul (GC_state s, objptr lhs, objptr rhs, size_t bytes);
10 PRIVATE objptr IntInf_quot (GC_state s, objptr lhs, objptr rhs, size_t bytes);
11 PRIVATE objptr IntInf_orb (GC_state s, objptr lhs, objptr rhs, size_t bytes);
12 PRIVATE objptr IntInf_rem (GC_state s, objptr lhs, objptr rhs, size_t bytes);
13 PRIVATE objptr IntInf_sub (GC_state s, objptr lhs, objptr rhs, size_t bytes);
14 PRIVATE objptr IntInf_xorb (GC_state s, objptr lhs, objptr rhs, size_t bytes);
15 PRIVATE objptr IntInf_neg (GC_state s, objptr arg, size_t bytes);
16 PRIVATE objptr IntInf_notb (GC_state s, objptr arg, size_t bytes);
17 PRIVATE objptr IntInf_arshift (GC_state s, objptr arg, Word32_t shift, size_t bytes);
18 PRIVATE objptr IntInf_lshift (GC_state s, objptr arg, Word32_t shift, size_t bytes);
19 PRIVATE Int32_t IntInf_compare (GC_state s, objptr lhs, objptr rhs);
20 PRIVATE objptr IntInf_toString (GC_state s, objptr arg, Int32_t base, size_t bytes);
21
22
23 objptr 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
30 objptr 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
37 objptr 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
44 objptr 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
51 objptr 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
58 objptr 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
65 objptr 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
72 objptr 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
79 objptr 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
87 objptr 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
94 objptr 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
102 objptr 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
109 objptr 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
117 Int32_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
125 objptr 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 }