1 /****************************************************************************
2     Copyright (C) 1987-2015 by Jeffery P. Hansen
3 
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8 
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13 
14     You should have received a copy of the GNU General Public License along
15     with this program; if not, write to the Free Software Foundation, Inc.,
16     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17 ****************************************************************************/
18 #ifndef __operators_h
19 #define __operators_h
20 
21 /*****************************************************************************
22  * Value operator methods
23  *****************************************************************************/
24 int Value_lnot(Value *r,Value *a,Value *b,Value *c);
25 int Value_not(Value *r,Value *a,Value *b,Value *c);
26 int Value_buf(Value *r,Value *a,Value *b,Value *c);
27 int Value_neg(Value *r,Value *a,Value *b,Value *c);
28 int Value_mul(Value *r,Value *a,Value *b,Value *c);
29 int Value_div(Value *r,Value *a,Value *b,Value *c);
30 int Value_mod(Value *r,Value *a,Value *b,Value *c);
31 int Value_add(Value *r,Value *a,Value *b,Value *c);
32 int Value_sub(Value *r,Value *a,Value *b,Value *c);
33 int Value_rshift(Value *r,Value *a,Value *b,Value *c);
34 int Value_lshift(Value *r,Value *a,Value *b,Value *c);
35 int Value_arshift(Value *r,Value *a,Value *b,Value *c);
36 int Value_alshift(Value *r,Value *a,Value *b,Value *c);
37 int Value_gt(Value *r,Value *a,Value *b,Value *c);
38 int Value_lt(Value *r,Value *a,Value *b,Value *c);
39 int Value_ge(Value *r,Value *a,Value *b,Value *c);
40 int Value_le(Value *r,Value *a,Value *b,Value *c);
41 int Value_eq(Value *r,Value *a,Value *b,Value *c);
42 int Value_neq(Value *r,Value *a,Value *b,Value *c);
43 int Value_caseEq(Value *r,Value *a,Value *b,Value *c);
44 int Value_caseNeq(Value *r,Value *a,Value *b,Value *c);
45 int Value_and(Value *r,Value *a,Value *b,Value *c);
46 int Value_nand(Value *r,Value *a,Value *b,Value *c);
47 int Value_xor(Value *r,Value *a,Value *b,Value *c);
48 int Value_nxor(Value *r,Value *a,Value *b,Value *c);
49 int Value_or(Value *r,Value *a,Value *b,Value *c);
50 int Value_nor(Value *r,Value *a,Value *b,Value *c);
51 int Value_land(Value *r,Value *a,Value *b,Value *c);
52 int Value_lor(Value *r,Value *a,Value *b,Value *c);
53 int Value_ifelse(Value *r,Value *a,Value *b,Value *c);
54 int Value_concat(Value *r,Value *a,Value *b,Value *c);
55 int Value_repcat(Value *r,Value *a,Value *b,Value *c);
56 int Value_uand(Value *r,Value *a,Value *b,Value *c);
57 int Value_uor(Value *r,Value *a,Value *b,Value *c);
58 int Value_uxor(Value *r,Value *a,Value *b,Value *c);
59 int Value_unand(Value *r,Value *a,Value *b,Value *c);
60 int Value_unor(Value *r,Value *a,Value *b,Value *c);
61 int Value_unxor(Value *r,Value *a,Value *b,Value *c);
62 int Value_nmos(Value *r,Value *i,Value *g,Value *dummy);
63 int Value_pmos(Value *r,Value *i,Value *g,Value *dummy);
64 int Value_bufif1(Value *r,Value *i,Value *e,Value *dummy);
65 int Value_bufif0(Value *r,Value *i,Value *e,Value *dummy);
66 
67 /*****************************************************************************
68  * Single-word operator methods.
69  *
70  * Some operators may have more efficient implementations when we know the
71  * operands fit into a single word (32-bit or 64-bit depending on the machine).
72  * These functions with a _w_ peform the same action as the above normal
73  * operator function but are optimized under the single word assumption.
74  * The expression byte code generator will automatically select the correct
75  * implementation.
76  *
77  *****************************************************************************/
78 int Value_w_not(Value *r,Value *a,Value *b,Value *c);
79 int Value_w_neg(Value *r,Value *a,Value *b,Value *c);
80 int Value_w_uand(Value *r,Value *a,Value *b,Value *c);
81 int Value_w_uor(Value *r,Value *a,Value *b,Value *c);
82 int Value_w_uxor(Value *r,Value *a,Value *b,Value *c);
83 int Value_w_unand(Value *r,Value *a,Value *b,Value *c);
84 int Value_w_unor(Value *r,Value *a,Value *b,Value *c);
85 int Value_w_unxor(Value *r,Value *a,Value *b,Value *c);
86 int Value_w_add(Value *r,Value *a,Value *b,Value *c);
87 int Value_w_sub(Value *r,Value *a,Value *b,Value *c);
88 int Value_w_mul(Value *r,Value *a,Value *b,Value *c);
89 int Value_w_div(Value *r,Value *a,Value *b,Value *c);
90 int Value_w_mod(Value *r,Value *a,Value *b,Value *c);
91 int Value_w_rshift(Value *r,Value *a,Value *b,Value *c);
92 int Value_w_lshift(Value *r,Value *a,Value *b,Value *c);
93 int Value_w_arshift(Value *r,Value *a,Value *b,Value *c);
94 int Value_w_alshift(Value *r,Value *a,Value *b,Value *c);
95 int Value_w_gt(Value *r,Value *a,Value *b,Value *c);
96 int Value_w_lt(Value *r,Value *a,Value *b,Value *c);
97 int Value_w_ge(Value *r,Value *a,Value *b,Value *c);
98 int Value_w_le(Value *r,Value *a,Value *b,Value *c);
99 int Value_w_land(Value *r,Value *a,Value *b,Value *c);
100 int Value_w_lor(Value *r,Value *a,Value *b,Value *c);
101 int Value_w_mul(Value *r,Value *a,Value *b,Value *c);
102 int Value_w_div(Value *r,Value *a,Value *b,Value *c);
103 
104 /*****************************************************************************
105  * Floating-point operator methods
106  *
107  *****************************************************************************/
108 int Value_f_gt(Value *r,Value *a,Value *b,Value *c);
109 int Value_f_lt(Value *r,Value *a,Value *b,Value *c);
110 int Value_f_ge(Value *r,Value *a,Value *b,Value *c);
111 int Value_f_le(Value *r,Value *a,Value *b,Value *c);
112 int Value_f_eq(Value *r,Value *a,Value *b,Value *c);
113 int Value_f_neq(Value *r,Value *a,Value *b,Value *c);
114 int Value_f_add(Value *r,Value *a,Value *b,Value *c);
115 int Value_f_sub(Value *r,Value *a,Value *b,Value *c);
116 int Value_f_mul(Value *r,Value *a,Value *b,Value *c);
117 int Value_f_div(Value *r,Value *a,Value *b,Value *c);
118 int Value_f_neg(Value *r,Value *a,Value *b,Value *c);
119 int Value_f_caseEq(Value *r,Value *a,Value *b,Value *c);
120 int Value_f_caseNeq(Value *r,Value *a,Value *b,Value *c);
121 
122 #endif
123