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