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