GNU PROLOG with UTF8 support
math_supp.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------*
2  * GNU Prolog *
3  * *
4  * Part : FD constraint solver buit-in predicates *
5  * File : math_supp.h *
6  * Descr.: mathematical support - header file *
7  * Author: Daniel Diaz *
8  * *
9  * Copyright (C) 1999-2015 Daniel Diaz *
10  * *
11  * This file is part of GNU Prolog *
12  * *
13  * GNU Prolog is free software: you can redistribute it and/or *
14  * modify it under the terms of either: *
15  * *
16  * - the GNU Lesser General Public License as published by the Free *
17  * Software Foundation; either version 3 of the License, or (at your *
18  * option) any later version. *
19  * *
20  * or *
21  * *
22  * - the GNU General Public License as published by the Free *
23  * Software Foundation; either version 2 of the License, or (at your *
24  * option) any later version. *
25  * *
26  * or both in parallel, as here. *
27  * *
28  * GNU Prolog is distributed in the hope that it will be useful, *
29  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
30  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
31  * General Public License for more details. *
32  * *
33  * You should have received copies of the GNU General Public License and *
34  * the GNU Lesser General Public License along with this program. If *
35  * not, see http://www.gnu.org/licenses/. *
36  *-------------------------------------------------------------------------*/
37 
38 
39 /*---------------------------------*
40  * Constants *
41  *---------------------------------*/
42 
43 #define MASK_EMPTY 0
44 #define MASK_LEFT 1
45 #define MASK_RIGHT 2
46 
47 
48 
49 
50 #if 0
51 #define DEBUG
52 #endif
53 
54 
55 
56 
57 /*---------------------------------*
58  * Type Definitions *
59  *---------------------------------*/
60 
61 /*---------------------------------*
62  * Global Variables *
63  *---------------------------------*/
64 
65 
66 #ifdef MATH_SUPP_FILE
67 
69 
70 #ifdef DEBUG
71 char *cur_op;
72 #endif
73 
74 #else
75 
76 #ifdef DEBUG
77 char *cur_op;
78 #endif
79 
80 extern Bool pl_full_ac;
81 
82 #endif
83 
84 
85 /*---------------------------------*
86  * Function Prototypes *
87  *---------------------------------*/
88 
89 Bool Pl_Load_Left_Right(Bool optim_eq, WamWord le_word, WamWord re_word,
90  int *mask, PlLong *c, WamWord *l_word, WamWord *r_word);
91 
93 
95 
96 
97 
98 #ifdef DEBUG
99 
100 void Debug_Display(char *fct, int n, ...);
101 
102 #endif
103 
104 
105 
106  /* defined in fd_math_fd.fd */
107 
108 Bool pl_x_eq_c(WamWord x, WamWord c); /* in math_supp.c */
109 
111 
113 
115 
117 
118 
119 
121 
123 
125 
126 
127 
129 
130 
131 
133 
135 
137 
138 
139 
141 
143 
144 
145 
147 
149 
151 
153 
155 
157  WamWord t);
158 
160  WamWord z, WamWord t);
161 
163 
165 
167 
169  WamWord z);
170 
172 
174  WamWord t);
175 
177  WamWord z, WamWord t);
178 
179 
180 
182 
184 
186 
188 
190 
192 
194 
196 
198 
199 
200 
202 
204 
206 
208 
210 
212 
214 
216 
217 
218 
220 
222 
224 
226 
227 
228 
230 
232 
234 
236 
238 
240 
241 
242 
243  /* defined in fd_bool_fd.fd */
244 
246 
248 
250 
252 
254 
256 
258 
260 
262 
264 
266 
268 
269 
270 
272 
274 
276 
278 
280 
282 
283 
284 
286 
288 
290 
292 
294 
296 
297 
298 
300 
301 
302 
304 
306 
308 
309 
310 
312 
314 
316 
317 
318 
319 
320 #ifdef DEBUG
321 
322 #define DEBUG_2(f, a1, a2) Debug_Display(#f, 2, a1, a2)
323 
324 #define DEBUG_3(f, a1, a2, a3) Debug_Display(#f, 3, a1, a2, a3)
325 
326 #define DEBUG_4(f, a1, a2, a3, a4) Debug_Display(#f, 4, a1, a2, a3, a4)
327 
328 #define DEBUG_5(f, a1, a2, a3, a4, a5) Debug_Display(#f, 5, a1, a2, a3, a4, a5)
329 
330 #define DEBUG_6(f, a1, a2, a3, a4, a5, a6) Debug_Display(#f, 6, a1, a2, a3, a4, a5, a6)
331 
332 #else
333 
334 #define DEBUG_2(f, a1, a2)
335 
336 #define DEBUG_3(f, a1, a2, a3)
337 
338 #define DEBUG_4(f, a1, a2, a3, a4)
339 
340 #define DEBUG_5(f, a1, a2, a3, a4, a5)
341 
342 #define DEBUG_6(f, a1, a2, a3, a4, a5, a6)
343 
344 #endif
345 
346 
347 
348 #define PRIM_CSTR_2(f, a1, a2) \
349  do \
350  { \
351  DEBUG_2(f, a1, a2); \
352  if (!f(a1, a2)) \
353  return FALSE; \
354  } \
355  while (0)
356 
357 #define PRIM_CSTR_3(f, a1, a2, a3) \
358  do \
359  { \
360  DEBUG_3(f, a1, a2, a3); \
361  if (!f(a1, a2, a3)) \
362  return FALSE; \
363  } \
364  while (0)
365 
366 #define PRIM_CSTR_4(f, a1, a2, a3, a4) \
367  do \
368  { \
369  DEBUG_4(f, a1, a2, a3, a4); \
370  if (!f(a1, a2, a3, a4)) \
371  return FALSE; \
372  } \
373  while (0)
374 
375 #define PRIM_CSTR_5(f, a1, a2, a3, a4, a5) \
376  do \
377  { \
378  DEBUG_5(f, a1, a2, a3, a4, a5); \
379  if (!f(a1, a2, a3, a4, a5)) \
380  return FALSE; \
381  } \
382  while (0)
383 
384 #define PRIM_CSTR_6(f, a1, a2, a3, a4, a5, a6) \
385  do \
386  { \
387  DEBUG_6(f, a1, a2, a3, a4, a5, a6); \
388  if (!f(a1, a2, a3, a4, a5, a6)) \
389  return FALSE; \
390  } \
391  while (0)
392 
393 
394 
395 
396 #define MATH_CSTR_2(f, a1, a2) \
397  do \
398  { \
399  if (pl_full_ac == FALSE) \
400  PRIM_CSTR_2(f, a1, a2); \
401  else \
402  PRIM_CSTR_2(f##_F, a1, a2); \
403  } \
404  while (0)
405 
406 #define MATH_CSTR_3(f, a1, a2, a3) \
407  do \
408  { \
409  if (pl_full_ac == FALSE) \
410  PRIM_CSTR_3(f, a1, a2, a3); \
411  else \
412  PRIM_CSTR_3(f##_F, a1, a2, a3); \
413  } \
414  while (0)
415 
416 #define MATH_CSTR_4(f, a1, a2, a3, a4) \
417  do \
418  { \
419  if (pl_full_ac == FALSE) \
420  PRIM_CSTR_4(f, a1, a2, a3, a4); \
421  else \
422  PRIM_CSTR_4(f##_F, a1, a2, a3, a4); \
423  } \
424  while (0)
425 
426 #define MATH_CSTR_5(f, a1, a2, a3, a4, a5) \
427  do \
428  { \
429  if (pl_full_ac == FALSE) \
430  PRIM_CSTR_5(f, a1, a2, a3, a4, a5); \
431  else \
432  PRIM_CSTR_5(f##_F, a1, a2, a3, a4, a5); \
433  } \
434  while (0)
435 
436 #define MATH_CSTR_6(f, a1, a2, a3, a4, a5, a6) \
437  do \
438  { \
439  if (pl_full_ac == FALSE) \
440  PRIM_CSTR_6(f, a1, a2, a3, a4, a5, a6); \
441  else \
442  PRIM_CSTR_6(f##_F, a1, a2, a3, a4, a5, a6); \
443  } \
444  while (0)
445 
Bool pl_max_x_y_eq_z(WamWord x, WamWord y, WamWord z)
Bool pl_truth_x_neq_c_F(WamWord x, WamWord c, WamWord b)
Bool pl_truth_x_plus_c_gte_y(WamWord x, WamWord c, WamWord y, WamWord b)
Bool pl_ax_plus_y_eq_z(WamWord a, WamWord x, WamWord y, WamWord z)
Bool pl_x_plus_y_eq_z_F(WamWord x, WamWord y, WamWord z)
Bool pl_max_x_a_eq_z_F(WamWord x, WamWord a, WamWord z)
Bool pl_x_power_a_eq_y_F(WamWord x, WamWord a, WamWord y)
Bool pl_ax_plus_y_plus_z_eq_t_F(WamWord a, WamWord x, WamWord y, WamWord z, WamWord t)
Bool pl_quot_rem_x_y_r_eq_z_F(WamWord x, WamWord y, WamWord r, WamWord z)
Bool pl_ax_eq_y(WamWord a, WamWord x, WamWord y)
Bool pl_x_and_y_eq_b(WamWord x, WamWord y, WamWord b)
static CHAR32_T c
Definition: scan_supp.c:65
Bool pl_abs_x_minus_y_eq_z_F(WamWord x, WamWord y, WamWord z)
Bool pl_x_plus_c_eq_y(WamWord x, WamWord c, WamWord y)
Bool pl_quot_rem_a_y_r_eq_z(WamWord a, WamWord y, WamWord r, WamWord z)
Bool pl_a_power_n_eq_y(WamWord a, WamWord n, WamWord y)
Bool pl_max_x_a_eq_z(WamWord x, WamWord a, WamWord z)
Bool pl_truth_x_plus_c_neq_y_F(WamWord x, WamWord c, WamWord y, WamWord b)
Bool pl_truth_x_in_l_u(WamWord x, WamWord l, WamWord u, WamWord b)
Bool pl_x_lte_c(WamWord x, WamWord c)
Bool pl_truth_x_eq_c(WamWord x, WamWord c, WamWord b)
Bool pl_truth_x_plus_c_eq_y_F(WamWord x, WamWord c, WamWord y, WamWord b)
Bool pl_max_x_y_eq_z_F(WamWord x, WamWord y, WamWord z)
Bool pl_ax_plus_by_plus_z_eq_t_F(WamWord a, WamWord x, WamWord b, WamWord y, WamWord z, WamWord t)
Bool pl_truth_x_plus_c_neq_y(WamWord x, WamWord c, WamWord y, WamWord b)
Bool Pl_Term_Math_Loading(WamWord l_word, WamWord r_word)
Definition: math_supp.c:283
Bool pl_x_plus_y_eq_z(WamWord x, WamWord y, WamWord z)
Bool pl_truth_x_plus_c_lte_y(WamWord x, WamWord c, WamWord y, WamWord b)
Bool pl_ax_plus_by_plus_z_eq_t(WamWord a, WamWord x, WamWord b, WamWord y, WamWord z, WamWord t)
Bool pl_x_or_y_eq_1(WamWord x, WamWord y)
Bool pl_truth_x_lte_y(WamWord x, WamWord y, WamWord b)
Bool pl_zero_power_n_eq_y(WamWord n, WamWord y)
Bool pl_ax_plus_by_eq_z(WamWord a, WamWord x, WamWord b, WamWord y, WamWord z)
Bool pl_a_power_n_eq_y_F(WamWord a, WamWord n, WamWord y)
Bool pl_truth_x_neq_y(WamWord x, WamWord y, WamWord b)
intptr_t PlLong
Definition: gprolog.h:88
Bool pl_ax_plus_y_plus_z_eq_t(WamWord a, WamWord x, WamWord y, WamWord z, WamWord t)
Bool pl_truth_x_lte_c(WamWord x, WamWord c, WamWord b)
Bool pl_x_plus_c_neq_y(WamWord x, WamWord c, WamWord y)
Bool pl_x_nimply_y_eq_b(WamWord x, WamWord y, WamWord b)
Bool pl_x_plus_c_gte_y(WamWord x, WamWord c, WamWord y)
Bool pl_min_x_a_eq_z_F(WamWord x, WamWord a, WamWord z)
Bool pl_x_power_a_eq_y(WamWord x, WamWord a, WamWord y)
Bool pl_x_neq_c(WamWord x, WamWord c)
Bool pl_truth_x_eq_y(WamWord x, WamWord y, WamWord b)
Bool pl_xy_eq_z(WamWord x, WamWord y, WamWord z)
int mask
Definition: test_oc.c:7
Bool pl_truth_x_plus_c_eq_y(WamWord x, WamWord c, WamWord y, WamWord b)
Bool pl_min_x_a_eq_z(WamWord x, WamWord a, WamWord z)
Bool pl_x_eq_c(WamWord x, WamWord c)
Definition: math_supp.c:1377
Bool pl_not_x_eq_b(WamWord x, WamWord b)
Bool pl_quot_rem_x_a_r_eq_z(WamWord x, WamWord a, WamWord r, WamWord z)
Bool pl_truth_x_gte_c(WamWord x, WamWord c, WamWord b)
Bool pl_x_lte_y(WamWord x, WamWord y)
Bool pl_xy_eq_z_F(WamWord x, WamWord y, WamWord z)
Bool pl_x_plus_c_eq_y_F(WamWord x, WamWord c, WamWord y)
Bool pl_min_x_y_eq_z(WamWord x, WamWord y, WamWord z)
Bool pl_x_and_y_eq_0(WamWord x, WamWord y)
Bool pl_x_plus_c_lte_y(WamWord x, WamWord c, WamWord y)
Bool pl_x_eq_y_F(WamWord x, WamWord y)
Bool pl_x_equiv_y_eq_b(WamWord x, WamWord y, WamWord b)
Bool pl_x_eq_y(WamWord x, WamWord y)
Bool pl_x_or_y_eq_b(WamWord x, WamWord y, WamWord b)
Bool pl_x_nequiv_y_eq_b(WamWord x, WamWord y, WamWord b)
Bool pl_truth_x_eq_c_F(WamWord x, WamWord c, WamWord b)
int t[10]
Definition: asm.c:28
Bool pl_truth_x_eq_y_F(WamWord x, WamWord y, WamWord b)
Bool pl_abs_x_minus_a_eq_z(WamWord x, WamWord a, WamWord z)
Bool Pl_Fd_Math_Unify_X_Y(WamWord x, WamWord y)
Definition: math_supp.c:1342
Bool pl_x_imply_y_eq_b(WamWord x, WamWord y, WamWord b)
Bool pl_truth_x_neq_c(WamWord x, WamWord c, WamWord b)
Bool pl_x_nand_y_eq_b(WamWord x, WamWord y, WamWord b)
Bool pl_x_nor_y_eq_b(WamWord x, WamWord y, WamWord b)
Bool pl_x_plus_y_plus_z_eq_t_F(WamWord x, WamWord y, WamWord z, WamWord t)
Bool pl_quot_rem_x_y_r_eq_z(WamWord x, WamWord y, WamWord r, WamWord z)
Bool pl_x2_eq_y(WamWord x, WamWord y)
Bool pl_x_lt_y(WamWord x, WamWord y)
Bool pl_truth_x_lt_y(WamWord x, WamWord y, WamWord b)
Bool pl_x_imply_y_eq_1(WamWord x, WamWord y)
Bool pl_ax_plus_y_eq_z_F(WamWord a, WamWord x, WamWord y, WamWord z)
Bool pl_quot_rem_x_a_r_eq_z_F(WamWord x, WamWord a, WamWord r, WamWord z)
Bool pl_min_x_y_eq_z_F(WamWord x, WamWord y, WamWord z)
long WamWord
Definition: LINUX_SIGSEGV.c:4
int y
Definition: asm_inst.c:44
Bool pl_ax_plus_by_eq_z_F(WamWord a, WamWord x, WamWord b, WamWord y, WamWord z)
char * fct[MAX_FCT]
Definition: extract_asm.c:79
PlLong x
Definition: chkma.c:99
Bool pl_x_plus_y_plus_z_eq_t(WamWord x, WamWord y, WamWord z, WamWord t)
Bool pl_ax_eq_y_F(WamWord a, WamWord x, WamWord y)
Bool pl_x2_eq_y_F(WamWord x, WamWord y)
Bool pl_abs_x_minus_a_eq_z_F(WamWord x, WamWord a, WamWord z)
Bool pl_full_ac
Bool pl_x_gte_c(WamWord x, WamWord c)
int Bool
Definition: bool.h:65
Bool pl_truth_x_neq_y_F(WamWord x, WamWord y, WamWord b)
Bool Pl_Load_Left_Right(Bool optim_eq, WamWord le_word, WamWord re_word, int *mask, PlLong *c, WamWord *l_word, WamWord *r_word)
Definition: math_supp.c:257
Bool pl_x_neq_y(WamWord x, WamWord y)
Bool pl_quot_rem_a_y_r_eq_z_F(WamWord a, WamWord y, WamWord r, WamWord z)
Bool pl_abs_x_minus_y_eq_z(WamWord x, WamWord y, WamWord z)