1 static char sccsid[] = "@(#)c22.c 4.1 10/17/80"; 2 #include "c2.h" 3 /* char c22[] = "@(#)c22.c 1.10 80/03/14 10:27:37"; */ 4 #define readonly 5 6 readonly char revbr[] = { 7 JNE, JEQ, JGT, JLT, JGE, JLE, 8 JNE, JEQ, JHI, JLO, JHIS, JLOS, 9 JBS, JBC, JLBS, JLBC, JBSC, JBCC, JBSS, JBCS }; 10 11 /* cursed be the preprocessor, whose impotence and stupidity 12 /* prevented this table being macro-generated from ../as/instrs 13 */ 14 15 readonly struct optab optab[] = { 16 "jbr",JBR, 17 "jeql",T(CBR,JEQ), 18 "jneq",T(CBR,JNE), 19 "jleq",T(CBR,JLE), 20 "jgeq",T(CBR,JGE), 21 "jlss",T(CBR,JLT), 22 "jgtr",T(CBR,JGT), 23 "jbc",T(CBR,JBC), 24 "jbs",T(CBR,JBS), 25 "jlequ",T(CBR,JLOS), 26 "jgequ",T(CBR,JHIS), 27 "jlssu",T(CBR,JLO), 28 "jgtru",T(CBR,JHI), 29 "jlbc",T(CBR,JLBC), 30 "jlbs",T(CBR,JLBS), 31 "jbcc",T(CBR,JBCC), 32 "jbsc",T(CBR,JBSC), 33 "jbcs",T(CBR,JBCS), 34 "jbss",T(CBR,JBSS), 35 "acbb",T(ACB,BYTE), 36 "acbd",T(ACB,DOUBLE), 37 "acbf",T(ACB,FLOAT), 38 "acbl",T(ACB,LONG), 39 "acbw",T(ACB,WORD), 40 "addb2",T(ADD,U(BYTE,OP2)), 41 "addb3",T(ADD,U(BYTE,OP3)), 42 "addd2",T(ADD,U(DOUBLE,OP2)), 43 "addd3",T(ADD,U(DOUBLE,OP3)), 44 "addf2",T(ADD,U(FLOAT,OP2)), 45 "addf3",T(ADD,U(FLOAT,OP3)), 46 "addl2",T(ADD,U(LONG,OP2)), 47 "addl3",T(ADD,U(LONG,OP3)), 48 "addw2",T(ADD,U(WORD,OP2)), 49 "addw3",T(ADD,U(WORD,OP3)), 50 "aobleq",AOBLEQ, 51 "aoblss",AOBLSS, 52 "ashl",T(ASH,LONG), 53 "ashq",T(ASH,QUAD), 54 "bbc",T(CBR,JBC), 55 "bbcc",T(CBR,JBCC), 56 "bbcci",T(CBR,JBCC), 57 "bbcs",T(CBR,JBCS), 58 "bbs",T(CBR,JBS), 59 "bbsc",T(CBR,JBSC), 60 "bbss",T(CBR,JBSS), 61 "bbssi",T(CBR,JBSS), 62 "bcc",T(CBR,JHIS), 63 "bcs",T(CBR,JLO), 64 "beql",T(CBR,JEQ), 65 "beqlu",T(CBR,JEQ), 66 "bgeq",T(CBR,JGE), 67 "bgequ",T(CBR,JHIS), 68 "bgtr",T(CBR,JGT), 69 "bgtru",T(CBR,JHI), 70 "bicb2",T(BIC,U(BYTE,OP2)), 71 "bicb3",T(BIC,U(BYTE,OP3)), 72 "bicl2",T(BIC,U(LONG,OP2)), 73 "bicl3",T(BIC,U(LONG,OP3)), 74 "bicw2",T(BIC,U(WORD,OP2)), 75 "bicw3",T(BIC,U(WORD,OP3)), 76 "bisb2",T(BIS,U(BYTE,OP2)), 77 "bisb3",T(BIS,U(BYTE,OP3)), 78 "bisl2",T(BIS,U(LONG,OP2)), 79 "bisl3",T(BIS,U(LONG,OP3)), 80 "bisw2",T(BIS,U(WORD,OP2)), 81 "bisw3",T(BIS,U(WORD,OP3)), 82 "bitb",T(BIT,BYTE), 83 "bitl",T(BIT,LONG), 84 "bitw",T(BIT,WORD), 85 "blbs",T(CBR,JLBS), 86 "blbc",T(CBR,JLBC), 87 "bleq",T(CBR,JLE), 88 "blequ",T(CBR,JLOS), 89 "blss",T(CBR,JLT), 90 "blssu",T(CBR,JLO), 91 "bneq",T(CBR,JNE), 92 "bnequ",T(CBR,JNE), 93 "brb",JBR, 94 "brw",JBR, 95 "bvc",T(CBR,0), 96 "bvs",T(CBR,0), 97 "callg",CALLS, 98 "calls",CALLS, 99 "caseb",T(CASE,BYTE), 100 "casel",T(CASE,LONG), 101 "casew",T(CASE,WORD), 102 "clrb",T(CLR,BYTE), 103 "clrd",T(CLR,DOUBLE), 104 "clrf",T(CLR,FLOAT), 105 "clrl",T(CLR,LONG), 106 "clrq",T(CLR,QUAD), 107 "clrw",T(CLR,WORD), 108 "cmpb",T(CMP,BYTE), 109 "cmpd",T(CMP,DOUBLE), 110 "cmpf",T(CMP,FLOAT), 111 "cmpl",T(CMP,LONG), 112 "cmpw",T(CMP,WORD), 113 "cvtbd",T(CVT,U(BYTE,DOUBLE)), 114 "cvtbf",T(CVT,U(BYTE,FLOAT)), 115 "cvtbl",T(CVT,U(BYTE,LONG)), 116 "cvtbw",T(CVT,U(BYTE,WORD)), 117 "cvtdb",T(CVT,U(DOUBLE,BYTE)), 118 "cvtdf",T(CVT,U(DOUBLE,FLOAT)), 119 "cvtdl",T(CVT,U(DOUBLE,LONG)), 120 "cvtdw",T(CVT,U(DOUBLE,WORD)), 121 "cvtfb",T(CVT,U(FLOAT,BYTE)), 122 "cvtfd",T(CVT,U(FLOAT,DOUBLE)), 123 "cvtfl",T(CVT,U(FLOAT,LONG)), 124 "cvtfw",T(CVT,U(FLOAT,WORD)), 125 "cvtlb",T(CVT,U(LONG,BYTE)), 126 "cvtld",T(CVT,U(LONG,DOUBLE)), 127 "cvtlf",T(CVT,U(LONG,FLOAT)), 128 "cvtlw",T(CVT,U(LONG,WORD)), 129 "cvtrdl",T(CVT,U(DOUBLE,LONG)), 130 "cvtrfl",T(CVT,U(FLOAT,LONG)), 131 "cvtwb",T(CVT,U(WORD,BYTE)), 132 "cvtwd",T(CVT,U(WORD,DOUBLE)), 133 "cvtwf",T(CVT,U(WORD,FLOAT)), 134 "cvtwl",T(CVT,U(WORD,LONG)), 135 "decb",T(DEC,BYTE), 136 "decl",T(DEC,LONG), 137 "decw",T(DEC,WORD), 138 "divb2",T(DIV,U(BYTE,OP2)), 139 "divb3",T(DIV,U(BYTE,OP3)), 140 "divd2",T(DIV,U(DOUBLE,OP2)), 141 "divd3",T(DIV,U(DOUBLE,OP3)), 142 "divf2",T(DIV,U(FLOAT,OP2)), 143 "divf3",T(DIV,U(FLOAT,OP3)), 144 "divl2",T(DIV,U(LONG,OP2)), 145 "divl3",T(DIV,U(LONG,OP3)), 146 "divw2",T(DIV,U(WORD,OP2)), 147 "divw3",T(DIV,U(WORD,OP3)), 148 "extv",T(EXTV,LONG), 149 "extzv",T(EXTZV,LONG), 150 "incb",T(INC,BYTE), 151 "incl",T(INC,LONG), 152 "incw",T(INC,WORD), 153 "insv",T(INSV,-1), 154 "jmp",JMP, 155 "mcomb",T(COM,BYTE), 156 "mcoml",T(COM,LONG), 157 "mcomw",T(COM,WORD), 158 "mnegb",T(NEG,BYTE), 159 "mnegd",T(NEG,DOUBLE), 160 "mnegf",T(NEG,FLOAT), 161 "mnegl",T(NEG,LONG), 162 "mnegw",T(NEG,WORD), 163 "movab",T(MOVA,BYTE), 164 "movad",T(MOVA,DOUBLE), 165 "movaf",T(MOVA,FLOAT), 166 "moval",T(MOVA,LONG), 167 "movaq",T(MOVA,QUAD), 168 "movaw",T(MOVA,WORD), 169 "movb",T(MOV,BYTE), 170 "movd",T(MOV,DOUBLE), 171 "movf",T(MOV,FLOAT), 172 "movl",T(MOV,LONG), 173 "movq",T(MOV,QUAD), 174 "movw",T(MOV,WORD), 175 "movzbl",T(MOVZ,U(BYTE,LONG)), 176 "movzbw",T(MOVZ,U(BYTE,WORD)), 177 "movzwl",T(MOVZ,U(WORD,LONG)), 178 "mulb2",T(MUL,U(BYTE,OP2)), 179 "mulb3",T(MUL,U(BYTE,OP3)), 180 "muld2",T(MUL,U(DOUBLE,OP2)), 181 "muld3",T(MUL,U(DOUBLE,OP3)), 182 "mulf2",T(MUL,U(FLOAT,OP2)), 183 "mulf3",T(MUL,U(FLOAT,OP3)), 184 "mull2",T(MUL,U(LONG,OP2)), 185 "mull3",T(MUL,U(LONG,OP3)), 186 "mulw2",T(MUL,U(WORD,OP2)), 187 "mulw3",T(MUL,U(WORD,OP3)), 188 "pushab",T(PUSHA,BYTE), 189 "pushad",T(PUSHA,DOUBLE), 190 "pushaf",T(PUSHA,FLOAT), 191 "pushal",T(PUSHA,LONG), 192 "pushaq",T(PUSHA,QUAD), 193 "pushaw",T(PUSHA,WORD), 194 "pushl",T(PUSH,LONG), 195 "ret",T(JBR,RET), 196 "sobgeq",SOBGEQ, 197 "sobgtr",SOBGTR, 198 "subb2",T(SUB,U(BYTE,OP2)), 199 "subb3",T(SUB,U(BYTE,OP3)), 200 "subd2",T(SUB,U(DOUBLE,OP2)), 201 "subd3",T(SUB,U(DOUBLE,OP3)), 202 "subf2",T(SUB,U(FLOAT,OP2)), 203 "subf3",T(SUB,U(FLOAT,OP3)), 204 "subl2",T(SUB,U(LONG,OP2)), 205 "subl3",T(SUB,U(LONG,OP3)), 206 "subw2",T(SUB,U(WORD,OP2)), 207 "subw3",T(SUB,U(WORD,OP3)), 208 "tstb",T(TST,BYTE), 209 "tstd",T(TST,DOUBLE), 210 "tstf",T(TST,FLOAT), 211 "tstl",T(TST,LONG), 212 "tstw",T(TST,WORD), 213 "xorb2",T(XOR,U(BYTE,OP2)), 214 "xorb3",T(XOR,U(BYTE,OP3)), 215 "xorl2",T(XOR,U(LONG,OP2)), 216 "xorl3",T(XOR,U(LONG,OP3)), 217 "xorw2",T(XOR,U(WORD,OP2)), 218 "xorw3",T(XOR,U(WORD,OP3)), 219 "movc3",MOVC3, 220 ".globl",EROU, 221 ".text",TEXT, 222 ".data",DATA, 223 ".bss",BSS, 224 ".align",ALIGN, 225 ".word",WGEN, 226 ".long",LGEN, 227 ".set",SET, 228 ".lcomm",LCOMM, 229 ".comm",COMM, 230 ".end",END, 231 "rsb",T(JBR,RSB), 232 "jsb",JSB, 233 "mfpr",T(MFPR,LONG), 234 "mtpr",T(MTPR,LONG), 235 "prober",T(PROBER,BYTE), 236 "probew",T(PROBEW,BYTE), 237 "adawi",0, 238 "addp4",0, 239 "addp6",0, 240 "adwc",0, 241 "ashp",0, 242 "bicpsw",0, 243 "bispsw",0, 244 "bpt",0, 245 "bsbb",0, 246 "bsbw",0, 247 "chme",0, 248 "chmk",0, 249 "chms",0, 250 "chmu",0, 251 "cmpc3",0, 252 "cmpc5",0, 253 "cmpp3",0, 254 "cmpp4",0, 255 "cmpv",0, 256 "cmpzv",0, 257 "crc",0, 258 "cvtlp",0, 259 "cvtpl",0, 260 "cvttp",0, 261 "cvtpt",0, 262 "cvtps",0, 263 "cvtsp",0, 264 "divp",0, 265 "editpc",0, 266 "ediv",0, 267 "emodd",0, 268 "emodf",0, 269 "emul",0, 270 "ffc",0, 271 "ffs",0, 272 "halt",0, 273 "index",0, 274 "insque",0, 275 "ldpctx",0, 276 "locc",0, 277 "matchc",0, 278 "movc5",0, 279 "movp",0, 280 "movpsl",0, 281 "movtc",0, 282 "movtuc",0, 283 "mulp",0, 284 "nop",0, 285 "polyd",0, 286 "polyf",0, 287 "popr",0, 288 "pushr",0, 289 "rei",0, 290 "remque",0, 291 "rotl",0, 292 "sbwc",0, 293 "scanc",0, 294 "skpc",0, 295 "spanc",0, 296 "subp4",0, 297 "subp6",0, 298 "svpctx",0, 299 "xfc",0, 300 "escd",0, 301 "esce",0, 302 "escf",0, 303 0, 0}; 304