1*6e84dc96SRichard Miller #define NSNAME 8 2*6e84dc96SRichard Miller #define NSYM 50 3*6e84dc96SRichard Miller #define NREG 32 4*6e84dc96SRichard Miller #define NOPROF (1<<0) 5*6e84dc96SRichard Miller #define DUPOK (1<<1) 6*6e84dc96SRichard Miller 7*6e84dc96SRichard Miller /* 8*6e84dc96SRichard Miller * Register roles are influenced by the compressed extension: 9*6e84dc96SRichard Miller * CIW, CL, CS and CB format use only R8-R15 10*6e84dc96SRichard Miller * CL and CS floating load/store use only F8-F15 11*6e84dc96SRichard Miller * CI and CSS load/store assume stack pointer is R2 12*6e84dc96SRichard Miller * C.JAL assumes link register is R1 13*6e84dc96SRichard Miller */ 14*6e84dc96SRichard Miller enum 15*6e84dc96SRichard Miller { 16*6e84dc96SRichard Miller REGZERO = 0, /* always zero */ 17*6e84dc96SRichard Miller REGLINK = 1, /* call return address */ 18*6e84dc96SRichard Miller REGSP = 2, /* stack pointer */ 19*6e84dc96SRichard Miller REGSB = 3, /* static base */ 20*6e84dc96SRichard Miller REGTMP = 4, /* assembler temporary */ 21*6e84dc96SRichard Miller REGEXT = 7, /* extern reg from here down */ 22*6e84dc96SRichard Miller REGRET = 8, /* fn return value */ 23*6e84dc96SRichard Miller REGARG = 8, /* fn arg value */ 24*6e84dc96SRichard Miller REGALLOC = 15, /* highest reg to allocate (allow for RV32E) */ 25*6e84dc96SRichard Miller 26*6e84dc96SRichard Miller FREGRET = 0, /* fn return value */ 27*6e84dc96SRichard Miller FREGEXT = 27, /* extern reg from here down */ 28*6e84dc96SRichard Miller FREGZERO = 28, 29*6e84dc96SRichard Miller FREGHALF = 29, 30*6e84dc96SRichard Miller FREGONE = 30, 31*6e84dc96SRichard Miller FREGTWO = 31, 32*6e84dc96SRichard Miller }; 33*6e84dc96SRichard Miller 34*6e84dc96SRichard Miller enum as 35*6e84dc96SRichard Miller { 36*6e84dc96SRichard Miller AXXX = 0, 37*6e84dc96SRichard Miller 38*6e84dc96SRichard Miller /* processor instructions */ 39*6e84dc96SRichard Miller AADD, 40*6e84dc96SRichard Miller AADDW, 41*6e84dc96SRichard Miller AAMO_D, 42*6e84dc96SRichard Miller AAMO_W, 43*6e84dc96SRichard Miller AAND, 44*6e84dc96SRichard Miller ABEQ, 45*6e84dc96SRichard Miller ABGE, 46*6e84dc96SRichard Miller ABGEU, 47*6e84dc96SRichard Miller ABLT, 48*6e84dc96SRichard Miller ABLTU, 49*6e84dc96SRichard Miller ABNE, 50*6e84dc96SRichard Miller ACSRRC, 51*6e84dc96SRichard Miller ACSRRCI, 52*6e84dc96SRichard Miller ACSRRS, 53*6e84dc96SRichard Miller ACSRRSI, 54*6e84dc96SRichard Miller ACSRRW, 55*6e84dc96SRichard Miller ACSRRWI, 56*6e84dc96SRichard Miller ADIV, 57*6e84dc96SRichard Miller ADIVU, 58*6e84dc96SRichard Miller ADIVUW, 59*6e84dc96SRichard Miller ADIVW, 60*6e84dc96SRichard Miller AFENCE, 61*6e84dc96SRichard Miller AFENCE_I, 62*6e84dc96SRichard Miller AJAL, 63*6e84dc96SRichard Miller AJALR, 64*6e84dc96SRichard Miller ALR_D, 65*6e84dc96SRichard Miller ALR_W, 66*6e84dc96SRichard Miller ALUI, 67*6e84dc96SRichard Miller AMOVB, 68*6e84dc96SRichard Miller AMOVBU, 69*6e84dc96SRichard Miller AMOVH, 70*6e84dc96SRichard Miller AMOVHU, 71*6e84dc96SRichard Miller AMOV, 72*6e84dc96SRichard Miller AMOVW, 73*6e84dc96SRichard Miller AMOVWU, 74*6e84dc96SRichard Miller AMUL, 75*6e84dc96SRichard Miller AMULH, 76*6e84dc96SRichard Miller AMULHSU, 77*6e84dc96SRichard Miller AMULHU, 78*6e84dc96SRichard Miller AMULW, 79*6e84dc96SRichard Miller AOR, 80*6e84dc96SRichard Miller AREM, 81*6e84dc96SRichard Miller AREMU, 82*6e84dc96SRichard Miller AREMUW, 83*6e84dc96SRichard Miller AREMW, 84*6e84dc96SRichard Miller ASC_D, 85*6e84dc96SRichard Miller ASC_W, 86*6e84dc96SRichard Miller ASLL, 87*6e84dc96SRichard Miller ASLLW, 88*6e84dc96SRichard Miller ASLT, 89*6e84dc96SRichard Miller ASLTU, 90*6e84dc96SRichard Miller ASRA, 91*6e84dc96SRichard Miller ASRAW, 92*6e84dc96SRichard Miller ASRL, 93*6e84dc96SRichard Miller ASRLW, 94*6e84dc96SRichard Miller ASUB, 95*6e84dc96SRichard Miller ASUBW, 96*6e84dc96SRichard Miller ASWAP_D, 97*6e84dc96SRichard Miller ASWAP_W, 98*6e84dc96SRichard Miller ASYS, 99*6e84dc96SRichard Miller AXOR, 100*6e84dc96SRichard Miller 101*6e84dc96SRichard Miller /* floating point */ 102*6e84dc96SRichard Miller AMOVF, /* FLW, FSW, FSGNJ.S */ 103*6e84dc96SRichard Miller AMOVD, /* FLD, FSD, FSGNJ.D */ 104*6e84dc96SRichard Miller AMOVFD, /* FCVT.D.S */ 105*6e84dc96SRichard Miller AMOVDF, /* FCVT.S.D */ 106*6e84dc96SRichard Miller AMOVWF, /* FCVT.S.W */ 107*6e84dc96SRichard Miller AMOVUF, /* FCVT.S.WU */ 108*6e84dc96SRichard Miller AMOVFW, /* FCVT.W.S */ 109*6e84dc96SRichard Miller AMOVWD, /* FCVT.D.W */ 110*6e84dc96SRichard Miller AMOVUD, /* FCVT.D.WU */ 111*6e84dc96SRichard Miller AMOVDW, /* FCVT.W.D */ 112*6e84dc96SRichard Miller AADDF, /* FADD.S */ 113*6e84dc96SRichard Miller AADDD, /* FADD.D */ 114*6e84dc96SRichard Miller ASUBF, /* FSUB.S */ 115*6e84dc96SRichard Miller ASUBD, /* FSUB.D */ 116*6e84dc96SRichard Miller AMULF, /* FMUL.S */ 117*6e84dc96SRichard Miller AMULD, /* FMUL.D */ 118*6e84dc96SRichard Miller ADIVF, /* FDIV.S */ 119*6e84dc96SRichard Miller ADIVD, /* FDIV.D */ 120*6e84dc96SRichard Miller ACMPLTF, /* FLT.S */ 121*6e84dc96SRichard Miller ACMPLTD, /* FLT.D */ 122*6e84dc96SRichard Miller ACMPEQF, /* FEQ.S */ 123*6e84dc96SRichard Miller ACMPEQD, /* FEQ.D */ 124*6e84dc96SRichard Miller ACMPLEF, /* FLE.S */ 125*6e84dc96SRichard Miller ACMPLED, /* FLE.S */ 126*6e84dc96SRichard Miller 127*6e84dc96SRichard Miller /* floating point instructions not included */ 128*6e84dc96SRichard Miller /* 129*6e84dc96SRichard Miller FMADD.S FMADD.D 130*6e84dc96SRichard Miller FMSUB.S FMSUB.D 131*6e84dc96SRichard Miller FNMSUB.S FNMSUB.D 132*6e84dc96SRichard Miller FNMADD.S FNMADD.D 133*6e84dc96SRichard Miller FSQRT.S FSQRT.D 134*6e84dc96SRichard Miller FSGNJ.S FSGNJ.D 135*6e84dc96SRichard Miller FSGNJN.S FSGNJN.D 136*6e84dc96SRichard Miller FSGNNX.S FSGNNX.D 137*6e84dc96SRichard Miller FMIN.S FMIN.D 138*6e84dc96SRichard Miller FMAX.S FMAX.D 139*6e84dc96SRichard Miller FMV.X.W 140*6e84dc96SRichard Miller FCLASS.S FCLASS.D 141*6e84dc96SRichard Miller FCVT.WU.S FCVT.WU.D 142*6e84dc96SRichard Miller FMV.W.X 143*6e84dc96SRichard Miller */ 144*6e84dc96SRichard Miller 145*6e84dc96SRichard Miller 146*6e84dc96SRichard Miller /* pseudo-ops */ 147*6e84dc96SRichard Miller ABGT, 148*6e84dc96SRichard Miller ABGTU, 149*6e84dc96SRichard Miller ABLE, 150*6e84dc96SRichard Miller ABLEU, 151*6e84dc96SRichard Miller ASGT, 152*6e84dc96SRichard Miller ASGTU, 153*6e84dc96SRichard Miller AJMP, 154*6e84dc96SRichard Miller ARET, 155*6e84dc96SRichard Miller ANOP, 156*6e84dc96SRichard Miller 157*6e84dc96SRichard Miller /* C compiler pseudo-ops */ 158*6e84dc96SRichard Miller ADATA, 159*6e84dc96SRichard Miller AGLOBL, 160*6e84dc96SRichard Miller AGOK, 161*6e84dc96SRichard Miller AHISTORY, 162*6e84dc96SRichard Miller ANAME, 163*6e84dc96SRichard Miller ATEXT, 164*6e84dc96SRichard Miller AWORD, 165*6e84dc96SRichard Miller AEND, 166*6e84dc96SRichard Miller ADYNT, 167*6e84dc96SRichard Miller AINIT, 168*6e84dc96SRichard Miller ASIGNAME, 169*6e84dc96SRichard Miller 170*6e84dc96SRichard Miller /* RV64 extension */ 171*6e84dc96SRichard Miller ADWORD, 172*6e84dc96SRichard Miller AMOVFV, 173*6e84dc96SRichard Miller AMOVDV, 174*6e84dc96SRichard Miller AMOVVF, 175*6e84dc96SRichard Miller AMOVUVF, 176*6e84dc96SRichard Miller AMOVVD, 177*6e84dc96SRichard Miller AMOVUVD, 178*6e84dc96SRichard Miller 179*6e84dc96SRichard Miller ALAST, 180*6e84dc96SRichard Miller }; 181*6e84dc96SRichard Miller 182*6e84dc96SRichard Miller /* type/name */ 183*6e84dc96SRichard Miller enum 184*6e84dc96SRichard Miller { 185*6e84dc96SRichard Miller D_GOK = 0, 186*6e84dc96SRichard Miller D_NONE, 187*6e84dc96SRichard Miller 188*6e84dc96SRichard Miller /* name */ 189*6e84dc96SRichard Miller D_EXTERN, 190*6e84dc96SRichard Miller D_STATIC, 191*6e84dc96SRichard Miller D_AUTO, 192*6e84dc96SRichard Miller D_PARAM, 193*6e84dc96SRichard Miller 194*6e84dc96SRichard Miller /* type */ 195*6e84dc96SRichard Miller D_BRANCH, 196*6e84dc96SRichard Miller D_OREG, 197*6e84dc96SRichard Miller D_CONST, 198*6e84dc96SRichard Miller D_FCONST, 199*6e84dc96SRichard Miller D_SCONST, 200*6e84dc96SRichard Miller D_REG, 201*6e84dc96SRichard Miller D_CTLREG, 202*6e84dc96SRichard Miller D_FREG, 203*6e84dc96SRichard Miller D_FCREG, 204*6e84dc96SRichard Miller D_FILE, 205*6e84dc96SRichard Miller D_FILE1, 206*6e84dc96SRichard Miller D_VCONST, 207*6e84dc96SRichard Miller }; 208*6e84dc96SRichard Miller 209*6e84dc96SRichard Miller /* 210*6e84dc96SRichard Miller * this is the ranlib header 211*6e84dc96SRichard Miller */ 212*6e84dc96SRichard Miller #define SYMDEF "__.SYMDEF" 213*6e84dc96SRichard Miller 214*6e84dc96SRichard Miller /* 215*6e84dc96SRichard Miller * this is the simulated IEEE floating point 216*6e84dc96SRichard Miller */ 217*6e84dc96SRichard Miller typedef struct ieee Ieee; 218*6e84dc96SRichard Miller struct ieee 219*6e84dc96SRichard Miller { 220*6e84dc96SRichard Miller long l; /* contains ls-man 0xffffffff */ 221*6e84dc96SRichard Miller long h; /* contains sign 0x80000000 222*6e84dc96SRichard Miller exp 0x7ff00000 223*6e84dc96SRichard Miller ms-man 0x000fffff */ 224*6e84dc96SRichard Miller }; 225