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