1 #include "l.h" 2 3 Optab optab[] = 4 { 5 { ATEXT, C_LEXT, C_NONE, C_LCON, 0, 0, 0 }, 6 { ATEXT, C_LEXT, C_REG, C_LCON, 0, 0, 0 }, 7 { ATEXT, C_ADDR, C_NONE, C_LCON, 0, 0, 0 }, 8 { ATEXT, C_ADDR, C_REG, C_LCON, 0, 0, 0 }, 9 10 { AADD, C_REG, C_REG, C_REG, 1, 4, 0 }, 11 { AADD, C_REG, C_NONE, C_REG, 1, 4, 0 }, 12 { AMOVW, C_REG, C_NONE, C_REG, 1, 4, 0 }, 13 { AMVN, C_REG, C_NONE, C_REG, 1, 4, 0 }, 14 { ACMP, C_REG, C_REG, C_NONE, 1, 4, 0 }, 15 16 { AADD, C_RCON, C_REG, C_REG, 2, 4, 0 }, 17 { AADD, C_RCON, C_NONE, C_REG, 2, 4, 0 }, 18 { AMOVW, C_RCON, C_NONE, C_REG, 2, 4, 0 }, 19 { AMVN, C_RCON, C_NONE, C_REG, 2, 4, 0 }, 20 { ACMP, C_RCON, C_REG, C_NONE, 2, 4, 0 }, 21 22 { AADD, C_SHIFT,C_REG, C_REG, 3, 4, 0 }, 23 { AADD, C_SHIFT,C_NONE, C_REG, 3, 4, 0 }, 24 { AMVN, C_SHIFT,C_NONE, C_REG, 3, 4, 0 }, 25 { ACMP, C_SHIFT,C_REG, C_NONE, 3, 4, 0 }, 26 27 { AMOVW, C_RECON,C_NONE, C_REG, 4, 4, REGSB }, 28 { AMOVW, C_RACON,C_NONE, C_REG, 4, 4, REGSP }, 29 30 { AB, C_NONE, C_NONE, C_SBRA, 5, 4, 0, LPOOL }, 31 { ABL, C_NONE, C_NONE, C_SBRA, 5, 4, 0 }, 32 { ABX, C_NONE, C_NONE, C_SBRA, 74, 20, 0 }, 33 { ABEQ, C_NONE, C_NONE, C_SBRA, 5, 4, 0 }, 34 35 { AB, C_NONE, C_NONE, C_ROREG, 6, 4, 0, LPOOL }, 36 { ABL, C_NONE, C_NONE, C_ROREG, 7, 8, 0 }, 37 { ABX, C_NONE, C_NONE, C_ROREG, 75, 12, 0 }, 38 { ABXRET, C_NONE, C_NONE, C_ROREG, 76, 4, 0 }, 39 40 { ASLL, C_RCON, C_REG, C_REG, 8, 4, 0 }, 41 { ASLL, C_RCON, C_NONE, C_REG, 8, 4, 0 }, 42 43 { ASLL, C_REG, C_NONE, C_REG, 9, 4, 0 }, 44 { ASLL, C_REG, C_REG, C_REG, 9, 4, 0 }, 45 46 { ASWI, C_NONE, C_NONE, C_NONE, 10, 4, 0 }, 47 { ASWI, C_NONE, C_NONE, C_LOREG, 10, 4, 0 }, 48 49 { AWORD, C_NONE, C_NONE, C_LCON, 11, 4, 0 }, 50 { AWORD, C_NONE, C_NONE, C_GCON, 11, 4, 0 }, 51 { AWORD, C_NONE, C_NONE, C_LEXT, 11, 4, 0 }, 52 { AWORD, C_NONE, C_NONE, C_ADDR, 11, 4, 0 }, 53 54 { AMOVW, C_NCON, C_NONE, C_REG, 12, 4, 0 }, 55 { AMOVW, C_LCON, C_NONE, C_REG, 12, 4, 0, LFROM }, 56 57 { AADD, C_NCON, C_REG, C_REG, 13, 8, 0 }, 58 { AADD, C_NCON, C_NONE, C_REG, 13, 8, 0 }, 59 { AMVN, C_NCON, C_NONE, C_REG, 13, 8, 0 }, 60 { ACMP, C_NCON, C_REG, C_NONE, 13, 8, 0 }, 61 { AADD, C_LCON, C_REG, C_REG, 13, 8, 0, LFROM }, 62 { AADD, C_LCON, C_NONE, C_REG, 13, 8, 0, LFROM }, 63 { AMVN, C_LCON, C_NONE, C_REG, 13, 8, 0, LFROM }, 64 { ACMP, C_LCON, C_REG, C_NONE, 13, 8, 0, LFROM }, 65 66 { AMOVB, C_REG, C_NONE, C_REG, 14, 8, 0 }, 67 { AMOVBU, C_REG, C_NONE, C_REG, 58, 4, 0 }, 68 { AMOVH, C_REG, C_NONE, C_REG, 14, 8, 0 }, 69 { AMOVHU, C_REG, C_NONE, C_REG, 14, 8, 0 }, 70 71 { AMUL, C_REG, C_REG, C_REG, 15, 4, 0 }, 72 { AMUL, C_REG, C_NONE, C_REG, 15, 4, 0 }, 73 74 { ADIV, C_REG, C_REG, C_REG, 16, 4, 0 }, 75 { ADIV, C_REG, C_NONE, C_REG, 16, 4, 0 }, 76 77 { AMULL, C_REG, C_REG, C_REGREG, 17, 4, 0 }, 78 79 { AMOVW, C_REG, C_NONE, C_SEXT, 20, 4, REGSB }, 80 { AMOVW, C_REG, C_NONE, C_SAUTO, 20, 4, REGSP }, 81 { AMOVW, C_REG, C_NONE, C_SOREG, 20, 4, 0 }, 82 { AMOVB, C_REG, C_NONE, C_SEXT, 20, 4, REGSB }, 83 { AMOVB, C_REG, C_NONE, C_SAUTO, 20, 4, REGSP }, 84 { AMOVB, C_REG, C_NONE, C_SOREG, 20, 4, 0 }, 85 { AMOVBU, C_REG, C_NONE, C_SEXT, 20, 4, REGSB }, 86 { AMOVBU, C_REG, C_NONE, C_SAUTO, 20, 4, REGSP }, 87 { AMOVBU, C_REG, C_NONE, C_SOREG, 20, 4, 0 }, 88 89 { AMOVW, C_SEXT, C_NONE, C_REG, 21, 4, REGSB }, 90 { AMOVW, C_SAUTO,C_NONE, C_REG, 21, 4, REGSP }, 91 { AMOVW, C_SOREG,C_NONE, C_REG, 21, 4, 0 }, 92 { AMOVBU, C_SEXT, C_NONE, C_REG, 21, 4, REGSB }, 93 { AMOVBU, C_SAUTO,C_NONE, C_REG, 21, 4, REGSP }, 94 { AMOVBU, C_SOREG,C_NONE, C_REG, 21, 4, 0 }, 95 96 { AMOVB, C_SEXT, C_NONE, C_REG, 22, 12, REGSB }, 97 { AMOVB, C_SAUTO,C_NONE, C_REG, 22, 12, REGSP }, 98 { AMOVB, C_SOREG,C_NONE, C_REG, 22, 12, 0 }, 99 { AMOVH, C_SEXT, C_NONE, C_REG, 22, 12, REGSB }, 100 { AMOVH, C_SAUTO,C_NONE, C_REG, 22, 12, REGSP }, 101 { AMOVH, C_SOREG,C_NONE, C_REG, 22, 12, 0 }, 102 { AMOVHU, C_SEXT, C_NONE, C_REG, 22, 12, REGSB }, 103 { AMOVHU, C_SAUTO,C_NONE, C_REG, 22, 12, REGSP }, 104 { AMOVHU, C_SOREG,C_NONE, C_REG, 22, 12, 0 }, 105 106 { AMOVH, C_REG, C_NONE, C_SEXT, 23, 12, REGSB }, 107 { AMOVH, C_REG, C_NONE, C_SAUTO, 23, 12, REGSP }, 108 { AMOVH, C_REG, C_NONE, C_SOREG, 23, 12, 0 }, 109 { AMOVHU, C_REG, C_NONE, C_SEXT, 23, 12, REGSB }, 110 { AMOVHU, C_REG, C_NONE, C_SAUTO, 23, 12, REGSP }, 111 { AMOVHU, C_REG, C_NONE, C_SOREG, 23, 12, 0 }, 112 113 { AMOVW, C_REG, C_NONE, C_LEXT, 30, 8, REGSB, LTO }, 114 { AMOVW, C_REG, C_NONE, C_LAUTO, 30, 8, REGSP, LTO }, 115 { AMOVW, C_REG, C_NONE, C_LOREG, 30, 8, 0, LTO }, 116 { AMOVW, C_REG, C_NONE, C_ADDR, 64, 8, 0, LTO }, 117 { AMOVB, C_REG, C_NONE, C_LEXT, 30, 8, REGSB, LTO }, 118 { AMOVB, C_REG, C_NONE, C_LAUTO, 30, 8, REGSP, LTO }, 119 { AMOVB, C_REG, C_NONE, C_LOREG, 30, 8, 0, LTO }, 120 { AMOVB, C_REG, C_NONE, C_ADDR, 64, 8, 0, LTO }, 121 { AMOVBU, C_REG, C_NONE, C_LEXT, 30, 8, REGSB, LTO }, 122 { AMOVBU, C_REG, C_NONE, C_LAUTO, 30, 8, REGSP, LTO }, 123 { AMOVBU, C_REG, C_NONE, C_LOREG, 30, 8, 0, LTO }, 124 { AMOVBU, C_REG, C_NONE, C_ADDR, 64, 8, 0, LTO }, 125 126 { AMOVW, C_LEXT, C_NONE, C_REG, 31, 8, REGSB, LFROM }, 127 { AMOVW, C_LAUTO,C_NONE, C_REG, 31, 8, REGSP, LFROM }, 128 { AMOVW, C_LOREG,C_NONE, C_REG, 31, 8, 0, LFROM }, 129 { AMOVW, C_ADDR, C_NONE, C_REG, 65, 8, 0, LFROM }, 130 { AMOVBU, C_LEXT, C_NONE, C_REG, 31, 8, REGSB, LFROM }, 131 { AMOVBU, C_LAUTO,C_NONE, C_REG, 31, 8, REGSP, LFROM }, 132 { AMOVBU, C_LOREG,C_NONE, C_REG, 31, 8, 0, LFROM }, 133 { AMOVBU, C_ADDR, C_NONE, C_REG, 65, 8, 0, LFROM }, 134 135 { AMOVB, C_LEXT, C_NONE, C_REG, 32, 16, REGSB, LFROM }, 136 { AMOVB, C_LAUTO,C_NONE, C_REG, 32, 16, REGSP, LFROM }, 137 { AMOVB, C_LOREG,C_NONE, C_REG, 32, 16, 0, LFROM }, 138 { AMOVB, C_ADDR, C_NONE, C_REG, 66, 16, 0, LFROM }, 139 { AMOVH, C_LEXT, C_NONE, C_REG, 32, 16, REGSB, LFROM }, 140 { AMOVH, C_LAUTO,C_NONE, C_REG, 32, 16, REGSP, LFROM }, 141 { AMOVH, C_LOREG,C_NONE, C_REG, 32, 16, 0, LFROM }, 142 { AMOVH, C_ADDR, C_NONE, C_REG, 66, 16, 0, LFROM }, 143 { AMOVHU, C_LEXT, C_NONE, C_REG, 32, 16, REGSB, LFROM }, 144 { AMOVHU, C_LAUTO,C_NONE, C_REG, 32, 16, REGSP, LFROM }, 145 { AMOVHU, C_LOREG,C_NONE, C_REG, 32, 16, 0, LFROM }, 146 { AMOVHU, C_ADDR, C_NONE, C_REG, 66, 16, 0, LFROM }, 147 148 { AMOVH, C_REG, C_NONE, C_LEXT, 33, 24, REGSB, LTO }, 149 { AMOVH, C_REG, C_NONE, C_LAUTO, 33, 24, REGSP, LTO }, 150 { AMOVH, C_REG, C_NONE, C_LOREG, 33, 24, 0, LTO }, 151 { AMOVH, C_REG, C_NONE, C_ADDR, 67, 24, 0, LTO }, 152 { AMOVHU, C_REG, C_NONE, C_LEXT, 33, 24, REGSB, LTO }, 153 { AMOVHU, C_REG, C_NONE, C_LAUTO, 33, 24, REGSP, LTO }, 154 { AMOVHU, C_REG, C_NONE, C_LOREG, 33, 24, 0, LTO }, 155 { AMOVHU, C_REG, C_NONE, C_ADDR, 67, 24, 0, LTO }, 156 157 { AMOVW, C_LECON,C_NONE, C_REG, 34, 8, REGSB, LFROM }, 158 { AMOVW, C_LACON,C_NONE, C_REG, 34, 8, REGSP, LFROM }, 159 160 { AMOVW, C_PSR, C_NONE, C_REG, 35, 4, 0 }, 161 { AMOVW, C_REG, C_NONE, C_PSR, 36, 4, 0 }, 162 { AMOVW, C_RCON, C_NONE, C_PSR, 37, 4, 0 }, 163 164 { AMOVM, C_LCON, C_NONE, C_SOREG, 38, 4, 0 }, 165 { AMOVM, C_SOREG,C_NONE, C_LCON, 39, 4, 0 }, 166 167 { ASWPW, C_SOREG,C_REG, C_REG, 40, 4, 0 }, 168 169 { ARFE, C_NONE, C_NONE, C_NONE, 41, 4, 0 }, 170 171 { AMOVF, C_FREG, C_NONE, C_FEXT, 50, 4, REGSB }, 172 { AMOVF, C_FREG, C_NONE, C_FAUTO, 50, 4, REGSP }, 173 { AMOVF, C_FREG, C_NONE, C_FOREG, 50, 4, 0 }, 174 175 { AMOVF, C_FEXT, C_NONE, C_FREG, 51, 4, REGSB }, 176 { AMOVF, C_FAUTO,C_NONE, C_FREG, 51, 4, REGSP }, 177 { AMOVF, C_FOREG,C_NONE, C_FREG, 51, 4, 0 }, 178 179 { AMOVF, C_FREG, C_NONE, C_LEXT, 52, 12, REGSB, LTO }, 180 { AMOVF, C_FREG, C_NONE, C_LAUTO, 52, 12, REGSP, LTO }, 181 { AMOVF, C_FREG, C_NONE, C_LOREG, 52, 12, 0, LTO }, 182 183 { AMOVF, C_LEXT, C_NONE, C_FREG, 53, 12, REGSB, LFROM }, 184 { AMOVF, C_LAUTO,C_NONE, C_FREG, 53, 12, REGSP, LFROM }, 185 { AMOVF, C_LOREG,C_NONE, C_FREG, 53, 12, 0, LFROM }, 186 187 { AMOVF, C_FREG, C_NONE, C_ADDR, 68, 8, 0, LTO }, 188 { AMOVF, C_ADDR, C_NONE, C_FREG, 69, 8, 0, LFROM }, 189 190 { AADDF, C_FREG, C_NONE, C_FREG, 54, 4, 0 }, 191 { AADDF, C_FREG, C_REG, C_FREG, 54, 4, 0 }, 192 { AADDF, C_FCON, C_NONE, C_FREG, 54, 4, 0 }, 193 { AADDF, C_FCON, C_REG, C_FREG, 54, 4, 0 }, 194 { AMOVF, C_FCON, C_NONE, C_FREG, 54, 4, 0 }, 195 { AMOVF, C_FREG, C_NONE, C_FREG, 54, 4, 0 }, 196 197 { ACMPF, C_FREG, C_REG, C_NONE, 54, 4, 0 }, 198 { ACMPF, C_FCON, C_REG, C_NONE, 54, 4, 0 }, 199 200 { AMOVFW, C_FREG, C_NONE, C_REG, 55, 4, 0 }, 201 { AMOVFW, C_REG, C_NONE, C_FREG, 55, 4, 0 }, 202 203 { AMOVW, C_REG, C_NONE, C_FCR, 56, 4, 0 }, 204 { AMOVW, C_FCR, C_NONE, C_REG, 57, 4, 0 }, 205 206 { AMOVW, C_SHIFT,C_NONE, C_REG, 59, 4, 0 }, 207 { AMOVBU, C_SHIFT,C_NONE, C_REG, 59, 4, 0 }, 208 209 { AMOVB, C_SHIFT,C_NONE, C_REG, 60, 4, 0 }, 210 211 { AMOVW, C_REG, C_NONE, C_SHIFT, 61, 4, 0 }, 212 { AMOVB, C_REG, C_NONE, C_SHIFT, 61, 4, 0 }, 213 { AMOVBU, C_REG, C_NONE, C_SHIFT, 61, 4, 0 }, 214 215 { ACASE, C_REG, C_NONE, C_NONE, 62, 4, 0 }, 216 { ABCASE, C_NONE, C_NONE, C_SBRA, 63, 4, 0 }, 217 218 { AMOVH, C_REG, C_NONE, C_HEXT, 70, 4, REGSB, V4 }, 219 { AMOVH, C_REG, C_NONE, C_HAUTO, 70, 4, REGSP, V4 }, 220 { AMOVH, C_REG, C_NONE, C_HOREG, 70, 4, 0, V4 }, 221 { AMOVHU, C_REG, C_NONE, C_HEXT, 70, 4, REGSB, V4 }, 222 { AMOVHU, C_REG, C_NONE, C_HAUTO, 70, 4, REGSP, V4 }, 223 { AMOVHU, C_REG, C_NONE, C_HOREG, 70, 4, 0, V4 }, 224 225 { AMOVB, C_HEXT, C_NONE, C_REG, 71, 4, REGSB, V4 }, 226 { AMOVB, C_HAUTO,C_NONE, C_REG, 71, 4, REGSP, V4 }, 227 { AMOVB, C_HOREG,C_NONE, C_REG, 71, 4, 0, V4 }, 228 { AMOVH, C_HEXT, C_NONE, C_REG, 71, 4, REGSB, V4 }, 229 { AMOVH, C_HAUTO,C_NONE, C_REG, 71, 4, REGSP, V4 }, 230 { AMOVH, C_HOREG,C_NONE, C_REG, 71, 4, 0, V4 }, 231 { AMOVHU, C_HEXT, C_NONE, C_REG, 71, 4, REGSB, V4 }, 232 { AMOVHU, C_HAUTO,C_NONE, C_REG, 71, 4, REGSP, V4 }, 233 { AMOVHU, C_HOREG,C_NONE, C_REG, 71, 4, 0, V4 }, 234 235 { AMOVH, C_REG, C_NONE, C_LEXT, 72, 8, REGSB, LTO|V4 }, 236 { AMOVH, C_REG, C_NONE, C_LAUTO, 72, 8, REGSP, LTO|V4 }, 237 { AMOVH, C_REG, C_NONE, C_LOREG, 72, 8, 0, LTO|V4 }, 238 { AMOVHU, C_REG, C_NONE, C_LEXT, 72, 8, REGSB, LTO|V4 }, 239 { AMOVHU, C_REG, C_NONE, C_LAUTO, 72, 8, REGSP, LTO|V4 }, 240 { AMOVHU, C_REG, C_NONE, C_LOREG, 72, 8, 0, LTO|V4 }, 241 242 { AMOVB, C_LEXT, C_NONE, C_REG, 73, 8, REGSB, LFROM|V4 }, 243 { AMOVB, C_LAUTO,C_NONE, C_REG, 73, 8, REGSP, LFROM|V4 }, 244 { AMOVB, C_LOREG,C_NONE, C_REG, 73, 8, 0, LFROM|V4 }, 245 { AMOVH, C_LEXT, C_NONE, C_REG, 73, 8, REGSB, LFROM|V4 }, 246 { AMOVH, C_LAUTO,C_NONE, C_REG, 73, 8, REGSP, LFROM|V4 }, 247 { AMOVH, C_LOREG,C_NONE, C_REG, 73, 8, 0, LFROM|V4 }, 248 { AMOVHU, C_LEXT, C_NONE, C_REG, 73, 8, REGSB, LFROM|V4 }, 249 { AMOVHU, C_LAUTO,C_NONE, C_REG, 73, 8, REGSP, LFROM|V4 }, 250 { AMOVHU, C_LOREG,C_NONE, C_REG, 73, 8, 0, LFROM|V4 }, 251 252 { AXXX, C_NONE, C_NONE, C_NONE, 0, 4, 0 }, 253 }; 254