Commit | Line | Data |
---|---|---|
7f918cf1 CE |
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 | } |