1 1.16 rillig /* $NetBSD: oper.c,v 1.16 2024/03/31 20:28:45 rillig Exp $ */ 2 1.1 rillig 3 1.1 rillig /*- 4 1.1 rillig * Copyright (c) 2021 The NetBSD Foundation, Inc. 5 1.1 rillig * All rights reserved. 6 1.1 rillig * 7 1.1 rillig * This code is derived from software contributed to The NetBSD Foundation 8 1.1 rillig * by Roland Illig. 9 1.1 rillig * 10 1.1 rillig * Redistribution and use in source and binary forms, with or without 11 1.1 rillig * modification, are permitted provided that the following conditions 12 1.1 rillig * are met: 13 1.1 rillig * 1. Redistributions of source code must retain the above copyright 14 1.1 rillig * notice, this list of conditions and the following disclaimer. 15 1.1 rillig * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 rillig * notice, this list of conditions and the following disclaimer in the 17 1.1 rillig * documentation and/or other materials provided with the distribution. 18 1.1 rillig * 19 1.1 rillig * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 1.1 rillig * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 1.1 rillig * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 1.1 rillig * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 1.1 rillig * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 1.1 rillig * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 1.1 rillig * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 1.1 rillig * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 1.1 rillig * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 1.1 rillig * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 1.1 rillig * POSSIBILITY OF SUCH DAMAGE. 30 1.1 rillig */ 31 1.1 rillig 32 1.1 rillig #include "op.h" 33 1.1 rillig #include "param.h" 34 1.1 rillig 35 1.13 rillig #define X true 36 1.13 rillig #define _ false 37 1.13 rillig 38 1.13 rillig const mod_t modtab[NOPS] = { 39 1.13 rillig 40 1.13 rillig /*- 41 1.13 rillig * Operator properties: 42 1.13 rillig * 43 1.13 rillig * b binary 44 1.13 rillig * l logical 45 1.13 rillig * b takes _Bool 46 1.13 rillig * z compares with zero 47 1.13 rillig * i requires integer 48 1.13 rillig * c requires integer or complex 49 1.13 rillig * a requires arithmetic 50 1.13 rillig * s requires scalar 51 1.13 rillig * f fold constant operands 52 1.13 rillig * v value context 53 1.13 rillig * b balance operands 54 1.13 rillig * s has side effects 55 1.13 rillig * l warn if left operand unsigned 56 1.13 rillig * r warn if right operand unsigned 57 1.13 rillig * p possible precedence confusion 58 1.13 rillig * c comparison 59 1.13 rillig * e valid on enum 60 1.13 rillig * e bad on enum 61 1.13 rillig * = warn if operand '=' 62 1.13 rillig * o has operands 63 1.13 rillig */ 64 1.13 rillig 65 1.13 rillig /* b l b z i c a s f v b s l r p c e e = o */ 66 1.13 rillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "no-op" }, 67 1.13 rillig {X,_,X,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_,_,X, "->" }, 68 1.13 rillig {X,_,X,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "." }, 69 1.13 rillig {_,X,X,X,_,_,_,X,X,_,_,_,_,_,_,_,_,X,_,X, "!" }, 70 1.13 rillig {_,_,_,_,_,X,_,_,X,X,_,_,_,_,_,_,_,X,X,X, "~" }, 71 1.13 rillig /* 72 1.13 rillig * The '++' and '--' operators are conceptually unary operators, but 73 1.13 rillig * lint implements them as binary operators due to the pre-multiplied 74 1.13 rillig * pointer arithmetics, see build_prepost_incdec and build_plus_minus. 75 1.13 rillig */ 76 1.13 rillig {_,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "++x" }, 77 1.13 rillig {_,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "--x" }, 78 1.13 rillig {_,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "x++" }, 79 1.13 rillig {_,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "x--" }, 80 1.13 rillig {_,_,_,_,_,_,X,_,X,X,_,_,_,_,_,_,_,X,X,X, "+" }, 81 1.13 rillig {_,_,_,_,_,_,X,_,X,X,_,_,X,_,_,_,_,X,X,X, "-" }, 82 1.13 rillig {_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_,_,X, "*" }, 83 1.13 rillig {_,_,X,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "&" }, 84 1.13 rillig /* b l b z i c a s f v b s l r p c e e = o */ 85 1.13 rillig {X,_,_,_,_,_,X,_,X,X,X,_,_,X,_,_,_,X,X,X, "*" }, 86 1.13 rillig {X,_,_,_,_,_,X,_,X,X,X,_,X,X,_,_,_,X,X,X, "/" }, 87 1.13 rillig {X,_,_,_,X,_,_,_,X,X,X,_,X,X,_,_,_,X,X,X, "%" }, 88 1.13 rillig {X,_,_,_,_,_,_,X,X,X,X,_,_,_,_,_,_,X,_,X, "+" }, 89 1.13 rillig {X,_,_,_,_,_,_,X,X,X,X,_,_,_,_,_,_,X,_,X, "-" }, 90 1.13 rillig {X,_,_,_,X,_,_,_,X,X,_,_,_,_,X,_,_,X,X,X, "<<" }, 91 1.13 rillig {X,_,_,_,X,_,_,_,X,X,_,_,X,_,X,_,_,X,X,X, ">>" }, 92 1.13 rillig /* b l b z i c a s f v b s l r p c e e = o */ 93 1.13 rillig {X,X,_,_,_,_,_,X,X,X,X,_,X,X,_,X,X,_,X,X, "<" }, 94 1.13 rillig {X,X,_,_,_,_,_,X,X,X,X,_,X,X,_,X,X,_,X,X, "<=" }, 95 1.13 rillig {X,X,_,_,_,_,_,X,X,X,X,_,X,X,_,X,X,_,X,X, ">" }, 96 1.13 rillig {X,X,_,_,_,_,_,X,X,X,X,_,X,X,_,X,X,_,X,X, ">=" }, 97 1.13 rillig {X,X,X,_,_,_,_,X,X,X,X,_,_,_,_,X,X,_,X,X, "==" }, 98 1.13 rillig {X,X,X,_,_,_,_,X,X,X,X,_,_,_,_,X,X,_,X,X, "!=" }, 99 1.13 rillig /* b l b z i c a s f v b s l r p c e e = o */ 100 1.13 rillig {X,_,X,_,X,_,_,_,X,X,X,_,_,_,X,_,_,X,_,X, "&" }, 101 1.13 rillig {X,_,X,_,X,_,_,_,X,X,X,_,_,_,X,_,_,X,_,X, "^" }, 102 1.13 rillig {X,_,X,_,X,_,_,_,X,X,X,_,_,_,X,_,_,X,_,X, "|" }, 103 1.13 rillig {X,X,X,X,_,_,_,X,X,_,_,_,_,_,_,_,_,X,_,X, "&&" }, 104 1.13 rillig {X,X,X,X,_,_,_,X,X,_,_,_,_,_,X,_,_,X,_,X, "||" }, 105 1.13 rillig {X,_,_,X,_,_,_,_,X,_,_,_,_,_,_,_,_,_,_,X, "?" }, 106 1.13 rillig {X,_,X,_,_,_,_,_,_,X,X,_,_,_,_,_,X,_,_,X, ":" }, 107 1.13 rillig /* b l b z i c a s f v b s l r p c e e = o */ 108 1.13 rillig {X,_,X,_,_,_,_,_,_,_,_,X,_,_,_,_,X,_,_,X, "=" }, 109 1.13 rillig {X,_,_,_,_,_,X,_,_,_,_,X,_,_,_,_,_,X,_,X, "*=" }, 110 1.13 rillig {X,_,_,_,_,_,X,_,_,_,_,X,_,X,_,_,_,X,_,X, "/=" }, 111 1.13 rillig {X,_,_,_,X,_,_,_,_,_,_,X,_,X,_,_,_,X,_,X, "%=" }, 112 1.13 rillig {X,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "+=" }, 113 1.13 rillig {X,_,_,_,_,_,_,X,_,_,_,X,_,_,_,_,_,X,_,X, "-=" }, 114 1.13 rillig {X,_,_,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, "<<=" }, 115 1.13 rillig {X,_,_,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, ">>=" }, 116 1.13 rillig {X,_,X,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, "&=" }, 117 1.13 rillig {X,_,X,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, "^=" }, 118 1.13 rillig {X,_,X,_,X,_,_,_,_,_,_,X,_,_,_,_,_,X,_,X, "|=" }, 119 1.13 rillig /* b l b z i c a s f v b s l r p c e e = o */ 120 1.13 rillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "name" }, 121 1.13 rillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "constant" }, 122 1.13 rillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "string" }, 123 1.13 rillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "fsel" }, 124 1.15 rillig {_,_,_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_, "call" }, 125 1.13 rillig {X,_,X,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X,X, "," }, 126 1.13 rillig {_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_,_,X, "convert" }, 127 1.13 rillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "load" }, 128 1.13 rillig {X,_,X,_,_,_,_,_,_,_,_,X,_,_,_,_,X,_,_,X, "return" }, 129 1.13 rillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "real" }, 130 1.13 rillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "imag" }, 131 1.13 rillig {X,_,X,_,_,_,_,_,_,_,_,X,_,_,_,_,X,_,_,X, "init" }, 132 1.13 rillig {_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_, "case" }, 133 1.13 rillig {X,_,X,_,_,_,_,_,_,_,_,_,_,_,_,_,X,_,_,X, "farg" }, 134 1.13 rillig }; 135