1 #include "l.h" 2 3 #define X 99 4 5 Optab optab[] = 6 { 7 { ATEXT, C_LEXT, C_NONE, C_LCON, 0, 0, 0 }, 8 { ATEXT, C_LEXT, C_REG, C_LCON, 0, 0, 0 }, 9 { ANOP, C_NONE, C_NONE, C_NONE, 0, 0, 0 }, 10 11 { AMOVW, C_REG, C_NONE, C_REG, 1, 4, 0 }, 12 13 { AMOVW, C_SCON, C_NONE, C_REG, 2, 4, 0 }, 14 { AMOVW, C_SACON,C_NONE, C_REG, 2, 4, REGSP }, 15 { AMOVW, C_SECON,C_NONE, C_REG, 2, 4, REGSB }, 16 17 { AMOVW, C_SOREG,C_NONE, C_REG, 3, 4, 0 }, 18 { AMOVW, C_ZOREG,C_REG, C_REG, 3, 4, 0 }, 19 { AMOVW, C_SAUTO,C_NONE, C_REG, 3, 4, REGSP }, 20 { AMOVW, C_SEXT, C_NONE, C_REG, 3, 4, REGSB }, 21 { AMOVB, C_SOREG,C_NONE, C_REG, 3, 4, 0 }, 22 { AMOVB, C_ZOREG,C_REG, C_REG, 3, 4, 0 }, 23 { AMOVB, C_SAUTO,C_NONE, C_REG, 3, 4, REGSP }, 24 { AMOVB, C_SEXT, C_NONE, C_REG, 3, 4, REGSB }, 25 { AMOVD, C_SOREG,C_NONE, C_REG, 3, 4, 0 }, 26 { AMOVD, C_ZOREG,C_REG, C_REG, 3, 4, 0 }, 27 { AMOVD, C_SAUTO,C_NONE, C_REG, 3, 4, REGSP }, 28 { AMOVD, C_SEXT, C_NONE, C_REG, 3, 4, REGSB }, 29 30 { AMOVW, C_REG, C_NONE, C_SOREG, 4, 4, 0 }, 31 { AMOVW, C_REG, C_REG, C_ZOREG, 4, 4, 0 }, 32 { AMOVW, C_REG, C_NONE, C_SAUTO, 4, 4, REGSP }, 33 { AMOVW, C_REG, C_NONE, C_SEXT, 4, 4, REGSB }, 34 { AMOVB, C_REG, C_NONE, C_SOREG, 4, 4, 0 }, 35 { AMOVB, C_REG, C_REG, C_ZOREG, 4, 4, 0 }, 36 { AMOVB, C_REG, C_NONE, C_SAUTO, 4, 4, REGSP }, 37 { AMOVB, C_REG, C_NONE, C_SEXT, 4, 4, REGSB }, 38 { AMOVD, C_REG, C_NONE, C_SOREG, 4, 4, 0 }, 39 { AMOVD, C_REG, C_REG, C_ZOREG, 4, 4, 0 }, 40 { AMOVD, C_REG, C_NONE, C_SAUTO, 4, 4, REGSP }, 41 { AMOVD, C_REG, C_NONE, C_SEXT, 4, 4, REGSB }, 42 43 { AMOVW, C_LCON, C_NONE, C_REG, 5, 8, 0 }, 44 45 { AMOVW, C_ASI, C_NONE, C_REG, 6, 4, 0 }, 46 { AMOVW, C_ASI, C_REG, C_REG, 6, 4, 0 }, 47 { AMOVB, C_ASI, C_NONE, C_REG, 6, 4, 0 }, 48 { AMOVB, C_ASI, C_REG, C_REG, 6, 4, 0 }, 49 { AMOVD, C_ASI, C_NONE, C_REG, 6, 4, 0 }, 50 { AMOVD, C_ASI, C_REG, C_REG, 6, 4, 0 }, 51 52 { AMOVW, C_REG, C_NONE, C_ASI, 7, 4, 0 }, 53 { AMOVW, C_REG, C_REG, C_ASI, 7, 4, 0 }, 54 { AMOVB, C_REG, C_NONE, C_ASI, 7, 4, 0 }, 55 { AMOVB, C_REG, C_REG, C_ASI, 7, 4, 0 }, 56 { AMOVD, C_REG, C_NONE, C_ASI, 7, 4, 0 }, 57 { AMOVD, C_REG, C_REG, C_ASI, 7, 4, 0 }, 58 59 { AMOVW, C_REG, C_NONE, C_PREG, 8, 4, 0 }, 60 { AMOVW, C_PREG, C_NONE, C_REG, 8, 4, 0 }, 61 62 { AMOVB, C_REG, C_NONE, C_REG, 9, 8, 0 }, 63 64 { AMOVW, C_LACON,C_NONE, C_REG, 10,12, REGSP }, 65 { AMOVW, C_LECON,C_NONE, C_REG, 10,12, REGSB }, 66 67 { AMOVW, C_LOREG,C_NONE, C_REG, 11,12, 0 }, 68 { AMOVW, C_LAUTO,C_NONE, C_REG, 11,12, REGSP }, 69 { AMOVW, C_LEXT, C_NONE, C_REG, 11,12, REGSB }, 70 { AMOVB, C_LOREG,C_NONE, C_REG, 11,12, 0 }, 71 { AMOVB, C_LAUTO,C_NONE, C_REG, 11,12, REGSP }, 72 { AMOVB, C_LEXT, C_NONE, C_REG, 11,12, REGSB }, 73 { AMOVD, C_LOREG,C_NONE, C_REG, 11,12, 0 }, 74 { AMOVD, C_LAUTO,C_NONE, C_REG, 11,12, REGSP }, 75 { AMOVD, C_LEXT, C_NONE, C_REG, 11,12, REGSB }, 76 77 { AMOVW, C_REG, C_NONE, C_LOREG, 12,12, 0 }, 78 { AMOVW, C_REG, C_NONE, C_LAUTO, 12,12, REGSP }, 79 { AMOVW, C_REG, C_NONE, C_LEXT, 12,12, REGSB }, 80 { AMOVB, C_REG, C_NONE, C_LOREG, 12,12, 0 }, 81 { AMOVB, C_REG, C_NONE, C_LAUTO, 12,12, REGSP }, 82 { AMOVB, C_REG, C_NONE, C_LEXT, 12,12, REGSB }, 83 { AMOVD, C_REG, C_NONE, C_LOREG, 12,12, 0 }, 84 { AMOVD, C_REG, C_NONE, C_LAUTO, 12,12, REGSP }, 85 { AMOVD, C_REG, C_NONE, C_LEXT, 12,12, REGSB }, 86 87 { AMOVW, C_UCON, C_NONE, C_REG, 13, 4, 0 }, 88 89 { AADD, C_SCON, C_NONE, C_REG, 20, 4, 0 }, 90 { AADD, C_SCON, C_REG, C_REG, 20, 4, 0 }, 91 92 { AADD, C_REG, C_NONE, C_REG, 21, 4, 0 }, 93 { AADD, C_REG, C_REG, C_REG, 21, 4, 0 }, 94 95 { AADD, C_LCON, C_NONE, C_REG, 22,12, 0 }, 96 { AADD, C_LCON, C_REG, C_REG, 22,12, 0 }, 97 98 { ACMP, C_REG, C_NONE, C_REG, 23, 4, 0 }, 99 { ACMP, C_REG, C_NONE, C_SCON, 24, 4, 0 }, 100 { ACMP, C_SCON, C_NONE, C_REG, 25, 8, 0 }, 101 102 { AADD, C_UCON, C_NONE, C_REG, 26, 8, 0 }, 103 { AADD, C_UCON, C_REG, C_REG, 26, 8, 0 }, 104 105 { AJMP, C_NONE, C_NONE, C_SOREG, 30, 4, 0 }, 106 { AJMPL, C_NONE, C_NONE, C_SOREG, 30, 4, 0 }, 107 108 { AJMP, C_NONE, C_NONE, C_SBRA, 31, 4, 0 }, 109 { ABA, C_NONE, C_NONE, C_SBRA, 31, 4, 0 }, 110 111 { AJMPL, C_NONE, C_NONE, C_LBRA, 32, 4, 0 }, 112 113 { ATA, C_REG, C_NONE, C_NONE, 33, 4, 0 }, 114 { ARETT, C_REG, C_NONE, C_REG, 34, 8, 0 }, 115 116 { AMOVW, C_SOREG,C_NONE, C_FSR, 40, 4, 0 }, 117 { AMOVW, C_SAUTO,C_NONE, C_FSR, 40, 4, REGSP }, 118 { AMOVW, C_SEXT, C_NONE, C_FSR, 40, 4, REGSB }, 119 { AMOVW, C_FSR, C_NONE, C_SOREG, 40, 4, 0 }, 120 { AMOVW, C_FSR, C_NONE, C_SAUTO, 40, 4, REGSP }, 121 { AMOVW, C_FSR, C_NONE, C_SEXT, 40, 4, REGSB }, 122 { AMOVD, C_FQ, C_NONE, C_SOREG, 40, 4, 0 }, 123 { AMOVD, C_FQ, C_NONE, C_SAUTO, 40, 4, REGSP }, 124 { AMOVD, C_FQ, C_NONE, C_SEXT, 40, 4, REGSB }, 125 126 { AFMOVF, C_SOREG,C_NONE, C_FREG, 41, 4, 0 }, 127 { AFMOVF, C_SAUTO,C_NONE, C_FREG, 41, 4, REGSP }, 128 { AFMOVF, C_SEXT, C_NONE, C_FREG, 41, 4, REGSB }, 129 { AMOVW, C_SOREG,C_NONE, C_FREG, 41, 4, 0 }, 130 { AMOVW, C_SAUTO,C_NONE, C_FREG, 41, 4, REGSP }, 131 { AMOVW, C_SEXT, C_NONE, C_FREG, 41, 4, REGSB }, 132 { AMOVD, C_SOREG,C_NONE, C_FREG, 41, 4, 0 }, 133 { AMOVD, C_SAUTO,C_NONE, C_FREG, 41, 4, REGSP }, 134 { AFMOVD, C_ESAUTO,C_NONE,C_FREG, 41, 4, REGSP }, 135 { AMOVD, C_SEXT, C_NONE, C_FREG, 41, 4, REGSB }, 136 { AFMOVD, C_ESEXT,C_NONE, C_FREG, 41, 4, REGSB }, 137 138 { AFMOVD, C_SOREG,C_NONE, C_FREG, 42, 8, 0 }, 139 { AFMOVD, C_SAUTO,C_NONE, C_FREG, 42, 8, REGSP }, 140 { AFMOVD, C_SEXT, C_NONE, C_FREG, 42, 8, REGSB }, 141 142 { AFMOVF, C_FREG, C_NONE, C_SOREG, 43, 4, 0 }, 143 { AFMOVF, C_FREG, C_NONE, C_SAUTO, 43, 4, REGSP }, 144 { AFMOVF, C_FREG, C_NONE, C_SEXT, 43, 4, REGSB }, 145 { AMOVW, C_FREG, C_NONE, C_SOREG, 43, 4, 0 }, 146 { AMOVW, C_FREG, C_NONE, C_SAUTO, 43, 4, REGSP }, 147 { AMOVW, C_FREG, C_NONE, C_SEXT, 43, 4, REGSB }, 148 { AMOVD, C_FREG, C_NONE, C_SOREG, 43, 4, 0 }, 149 { AMOVD, C_FREG, C_NONE, C_SAUTO, 43, 4, REGSP }, 150 { AFMOVD, C_FREG, C_NONE, C_ESAUTO, 43, 4, REGSP }, 151 { AMOVD, C_FREG, C_NONE, C_SEXT, 43, 4, REGSB }, 152 { AFMOVD, C_FREG, C_NONE, C_ESEXT, 43, 4, REGSB }, 153 154 { AFMOVD, C_FREG, C_NONE, C_SOREG, 44, 8, 0 }, 155 { AFMOVD, C_FREG, C_NONE, C_SAUTO, 44, 8, REGSP }, 156 { AFMOVD, C_FREG, C_NONE, C_SEXT, 44, 8, REGSB }, 157 158 { AFMOVF, C_LOREG,C_NONE, C_FREG, 45,12, 0 }, 159 { AFMOVF, C_LAUTO,C_NONE, C_FREG, 45,12, REGSP }, 160 { AFMOVF, C_LEXT, C_NONE, C_FREG, 45,12, REGSB }, 161 162 { AFMOVD, C_LOREG,C_NONE, C_FREG, 46,16, 0 }, 163 { AFMOVD, C_LAUTO,C_NONE, C_FREG, 46,16, REGSP }, 164 { AFMOVD, C_LEXT, C_NONE, C_FREG, 46,16, REGSB }, 165 166 { AFMOVF, C_FREG, C_NONE, C_LOREG, 47,12, 0 }, 167 { AFMOVF, C_FREG, C_NONE, C_LAUTO, 47,12, REGSP }, 168 { AFMOVF, C_FREG, C_NONE, C_LEXT, 47,12, REGSB }, 169 170 { AFMOVD, C_FREG, C_NONE, C_LOREG, 48,16, 0 }, 171 { AFMOVD, C_FREG, C_NONE, C_LAUTO, 48,16, REGSP }, 172 { AFMOVD, C_FREG, C_NONE, C_LEXT, 48,16, REGSB }, 173 174 { AFMOVD, C_FREG, C_NONE, C_FREG, 49, 8, 0 }, 175 { AFCMPD, C_FREG, C_NONE, C_FREG, 50, 4, 0 }, 176 177 { AFABSF, C_FREG, C_NONE, C_FREG, 57, 4, 0 }, 178 { AFMOVF, C_FREG, C_NONE, C_FREG, 57, 4, 0 }, 179 { AFADDD, C_FREG, C_NONE, C_FREG, 21, 4, 0 }, 180 { AFADDD, C_FREG, C_REG, C_FREG, 21, 4, 0 }, 181 182 { AWORD, C_LCON, C_NONE, C_NONE, 51, 4, 0 }, 183 184 { ADIV, C_REG, C_NONE, C_REG, 52,12, 0 }, 185 { ADIV, C_REG, C_REG, C_REG, 52,12, 0 }, 186 187 { ADIVL, C_REG, C_NONE, C_REG, 53, 8, 0 }, 188 { ADIVL, C_REG, C_REG, C_REG, 53, 8, 0 }, 189 190 { AMOD, C_REG, C_NONE, C_REG, 54,20, 0 }, 191 { AMOD, C_REG, C_REG, C_REG, 54,20, 0 }, 192 193 { AMODL, C_REG, C_NONE, C_REG, 55,16, 0 }, 194 { AMODL, C_REG, C_REG, C_REG, 55,16, 0 }, 195 196 { ABE, C_NONE, C_NONE, C_SBRA, 56, 4, 0 }, 197 198 { AXXX, C_NONE, C_NONE, C_NONE, 0, 4, 0 }, 199 }; 200