From ec054223de45b97cba0b6b72d8377fdfa57d9768 Mon Sep 17 00:00:00 2001 From: Ben Jones Date: Wed, 27 Mar 2024 13:31:19 -0600 Subject: [PATCH] make return vals of allocregs const where possible --- compiler/src/dmd/backend/cg87.d | 16 ++++++++-------- compiler/src/dmd/backend/cgxmm.d | 16 ++++++++-------- compiler/src/dmd/backend/cod1.d | 16 ++++++++-------- compiler/src/dmd/backend/cod2.d | 32 +++++++++++++++----------------- compiler/src/dmd/backend/cod3.d | 16 ++++++++-------- compiler/src/dmd/backend/cod4.d | 22 ++++++++++------------ 6 files changed, 57 insertions(+), 61 deletions(-) diff --git a/compiler/src/dmd/backend/cg87.d b/compiler/src/dmd/backend/cg87.d index 6395c01e8a73..d97f1c9ac1bc 100644 --- a/compiler/src/dmd/backend/cg87.d +++ b/compiler/src/dmd/backend/cg87.d @@ -852,7 +852,7 @@ void fixresult87(ref CodeBuilder cdb,elem *e,regm_t retregs, ref regm_t outretre pop87(); cdb.genfltreg(ESC(mf,1),3,0); genfwait(cdb); - reg_t reg = allocreg(cdb,outretregs,(sz == FLOATSIZE) ? TYfloat : TYdouble); + const reg = allocreg(cdb,outretregs,(sz == FLOATSIZE) ? TYfloat : TYdouble); if (sz == FLOATSIZE) { if (!I16) @@ -917,7 +917,7 @@ void fixresult87(ref CodeBuilder cdb,elem *e,regm_t retregs, ref regm_t outretre cdb.genfltreg(ESC(mf,1),3,0); genfwait(cdb); // MOVD XMM?,floatreg - reg_t reg = allocreg(cdb,outretregs,(sz == FLOATSIZE) ? TYfloat : TYdouble); + const reg = allocreg(cdb,outretregs,(sz == FLOATSIZE) ? TYfloat : TYdouble); cdb.genxmmreg(xmmload(tym),reg,0,tym); } else @@ -2972,8 +2972,8 @@ private void cdd_u64_I32(ref CodeBuilder cdb, elem *e, regm_t *pretregs) retregs = *pretregs; if (!retregs) retregs = ALLREGS; - reg_t reg = allocreg(cdb,retregs,tym); - reg = findreglsw(retregs); + allocreg(cdb,retregs,tym); + const reg = findreglsw(retregs); reg_t reg2 = findregmsw(retregs); movregconst(cdb,reg2,0x80000000,0); getregs(cdb,mask(reg2) | mAX); @@ -3056,9 +3056,9 @@ private void cdd_u64_I64(ref CodeBuilder cdb, elem *e, regm_t *pretregs) retregs = *pretregs; if (!retregs) retregs = ALLREGS; - reg_t reg = allocreg(cdb,retregs,tym); + const reg = allocreg(cdb,retregs,tym); regm_t regm2 = ALLREGS & ~retregs & ~mAX; - reg_t reg2 = allocreg(cdb,regm2,tym); + const reg2 = allocreg(cdb,regm2,tym); movregconst(cdb,reg2,0x80000000,0); getregs(cdb,mask(reg2) | mAX); @@ -3128,7 +3128,7 @@ void cdd_u32(ref CodeBuilder cdb, elem *e, regm_t *pretregs) retregs = *pretregs & ALLREGS; if (!retregs) retregs = ALLREGS; - reg_t reg = allocreg(cdb,retregs,tym); + const reg = allocreg(cdb,retregs,tym); cdb.genfltreg(0xC7,0,8); code *cf3 = cdb.last(); @@ -3344,7 +3344,7 @@ void cdrndtol(ref CodeBuilder cdb,elem *e,regm_t *pretregs) retregs = *pretregs & (ALLREGS | mBP); if (!retregs) retregs = ALLREGS; - reg_t reg = allocreg(cdb,retregs,tym); + const reg = allocreg(cdb,retregs,tym); genfwait(cdb); // FWAIT if (tysize(tym) > REGSIZE) { diff --git a/compiler/src/dmd/backend/cgxmm.d b/compiler/src/dmd/backend/cgxmm.d index bd2e9f8a5aba..8d2f1c75481f 100644 --- a/compiler/src/dmd/backend/cgxmm.d +++ b/compiler/src/dmd/backend/cgxmm.d @@ -115,7 +115,7 @@ void movxmmconst(ref CodeBuilder cdb, reg_t xreg, tym_t ty, eve* pev, regm_t fla if (I32 && sz == 8) { regm_t rm = ALLREGS; - reg_t r = allocreg(cdb,rm,TYint); // allocate scratch register + const r = allocreg(cdb,rm,TYint); // allocate scratch register static union U { targ_size_t s; targ_long[2] l; } U u = void; u.l[1] = 0; @@ -186,7 +186,7 @@ void orthxmm(ref CodeBuilder cdb, elem *e, regm_t *pretregs) if (e.Eoper == OPmin) { regm_t nretregs = XMMREGS & ~retregs; - reg_t sreg = allocreg(cdb,nretregs,e2.Ety); // hold sign bit + const sreg = allocreg(cdb,nretregs,e2.Ety); // hold sign bit const uint sz = tysize(e1.Ety); eve signbit; signbit.Vint = 0x80000000; @@ -644,7 +644,7 @@ void xmmpost(ref CodeBuilder cdb,elem *e,regm_t *pretregs) regm_t resultregs = XMMREGS & *pretregs & ~retregs; if (!resultregs) resultregs = XMMREGS & ~retregs; - reg_t resultreg = allocreg(cdb,resultregs, ty1); + const resultreg = allocreg(cdb,resultregs, ty1); cdb.gen2(xmmload(ty1,true),modregxrmx(3,resultreg-XMM0,reg-XMM0)); // MOVSS/D resultreg,reg checkSetVex(cdb.last(), ty1); @@ -705,7 +705,7 @@ void xmmneg(ref CodeBuilder cdb,elem *e,regm_t *pretregs) getregs(cdb,retregs); const reg = findreg(retregs); regm_t rretregs = XMMREGS & ~retregs; - reg_t rreg = allocreg(cdb,rretregs,tyml); + const rreg = allocreg(cdb,rretregs,tyml); eve signbit; signbit.Vint = 0x80000000; @@ -746,7 +746,7 @@ void xmmabs(ref CodeBuilder cdb,elem *e,regm_t *pretregs) getregs(cdb,retregs); const reg = findreg(retregs); regm_t rretregs = XMMREGS & ~retregs; - reg_t rreg = allocreg(cdb,rretregs,tyml); + const rreg = allocreg(cdb,rretregs,tyml); eve mask; mask.Vint = 0x7FFF_FFFF; @@ -1292,7 +1292,7 @@ static if (0) retregs = *pretregs & XMMREGS; if (!retregs) retregs = XMMREGS; - reg_t reg = allocreg(cdb,retregs, e.Ety); + const reg = allocreg(cdb,retregs, e.Ety); code_newreg(&cs, reg - XMM0); cs.Iop = op; cdb.gen(&cs); @@ -1478,7 +1478,7 @@ static if (0) // VBROADCASTSS X/YMM,MEM getlvalue(cdb,&cs, e1, 0); // get addressing mode assert((cs.Irm & 0xC0) != 0xC0); // AVX1 doesn't have register source operands - reg_t reg = allocreg(cdb,retregs,ty); + const reg = allocreg(cdb,retregs,ty); cs.Iop = VBROADCASTSS; cs.Irex &= ~REX_W; code_newreg(&cs,reg - XMM0); @@ -1518,7 +1518,7 @@ static if (0) // VBROADCASTSD YMM,MEM getlvalue(cdb,&cs, e1, 0); // get addressing mode assert((cs.Irm & 0xC0) != 0xC0); // AVX1 doesn't have register source operands - reg_t reg = allocreg(cdb,retregs,ty); + const reg = allocreg(cdb,retregs,ty); cs.Iop = VBROADCASTSD; cs.Irex &= ~REX_W; code_newreg(&cs,reg - XMM0); diff --git a/compiler/src/dmd/backend/cod1.d b/compiler/src/dmd/backend/cod1.d index b6135bc64744..82be99cc14ec 100644 --- a/compiler/src/dmd/backend/cod1.d +++ b/compiler/src/dmd/backend/cod1.d @@ -438,7 +438,7 @@ void genstackclean(ref CodeBuilder cdb,uint numpara,regm_t keepmsk) if (scratchm) { - reg_t r = allocreg(cdb, scratchm, TYint); + const r = allocreg(cdb, scratchm, TYint); cdb.gen1(0x58 + r); // POP r } else @@ -1033,7 +1033,7 @@ void getlvalue(ref CodeBuilder cdb,code *pcs,elem *e,regm_t keepmsk) int rbase; scratchm = ALLREGS & ~keepmsk; - reg_t r = allocreg(cdb, scratchm, TYint); + const r = allocreg(cdb, scratchm, TYint); if (ssflags & SSFLnobase1) { @@ -1147,8 +1147,8 @@ void getlvalue(ref CodeBuilder cdb,code *pcs,elem *e,regm_t keepmsk) if (e1ty == TYfptr) { idxregs |= mMSW & ALLREGS & ~keepmsk; - reg_t msreg = allocreg(cdb, idxregs, TYfptr); - msreg = findregmsw(idxregs); + allocreg(cdb, idxregs, TYfptr); + const msreg = findregmsw(idxregs); /* MOV msreg,segreg */ genregs(cdb, 0x8C, segfl[f], msreg); } @@ -1743,7 +1743,7 @@ void tstresult(ref CodeBuilder cdb, regm_t regm, tym_t tym, uint saveflag) if (regm & XMMREGS) { regm_t xregs = XMMREGS & ~regm; - reg_t xreg = allocreg(cdb,xregs, TYdouble); + const xreg = allocreg(cdb,xregs, TYdouble); opcode_t op = 0; if (tym == TYdouble || tym == TYidouble || tym == TYcdouble) op = 0x660000; @@ -5052,7 +5052,7 @@ void pushParams(ref CodeBuilder cdb, elem* e, uint stackalign, tym_t tyf) else { retregs = IDXREGS; // get an index reg - reg_t reg = allocreg(cdb, retregs, TYoffset); + const reg = allocreg(cdb, retregs, TYoffset); genregs(cdb, 0x89, SP, reg); // MOV reg,SP pop87(); cdb.gen2(op, modregrm(0, r, regtorm[reg])); // FSTP [reg] @@ -5292,7 +5292,7 @@ void loaddata(ref CodeBuilder cdb, elem* e, ref regm_t outretregs) if (tyvector(tym) && forregs & XMMREGS) { assert(!flags); - reg_t xreg = allocreg(cdb, forregs, tym); // allocate registers + const xreg = allocreg(cdb, forregs, tym); // allocate registers movxmmconst(cdb, xreg, tym, &e.EV, flags); fixresult(cdb, e, forregs, outretregs); return; @@ -5366,7 +5366,7 @@ void loaddata(ref CodeBuilder cdb, elem* e, ref regm_t outretregs) * Not so efficient. We should at least do a PXOR for 0. */ regm_t rm = ALLREGS; - reg_t r = allocreg(cdb, rm, TYint); // allocate scratch register + const r = allocreg(cdb, rm, TYint); // allocate scratch register movregconst(cdb, r, p[0], 0); cdb.genfltreg(0x89, r, 0); // MOV floatreg,r movregconst(cdb, r, p[1], 0); diff --git a/compiler/src/dmd/backend/cod2.d b/compiler/src/dmd/backend/cod2.d index 53aa09b1dd69..924e84e5dfb2 100644 --- a/compiler/src/dmd/backend/cod2.d +++ b/compiler/src/dmd/backend/cod2.d @@ -371,7 +371,7 @@ void cdorth(ref CodeBuilder cdb,elem *e,regm_t *pretregs) code csx = void; getlvalue(cdb,&csx,e,0); nest -= inc; - reg_t regx = allocreg(cdb,*pretregs,ty); + const regx = allocreg(cdb,*pretregs,ty); csx.Iop = LEA; code_newreg(&csx, regx); cdb.gen(&csx); // LEA regx,EA @@ -1100,7 +1100,7 @@ void cdmul(ref CodeBuilder cdb,elem *e,regm_t *pretregs) resreg &= ~(mBP | mR13); if (!resreg) resreg = retregs; - reg_t reg = allocreg(cdb,resreg,TYint); + const reg = allocreg(cdb,resreg,TYint); regm_t sregm = (ALLREGS & ~mR13) & ~resreg; codelem(cdb,e.EV.E1,&sregm,false); @@ -1136,7 +1136,7 @@ void cdmul(ref CodeBuilder cdb,elem *e,regm_t *pretregs) scodelem(cdb,e.EV.E1,&retregs,0,true); // eval left leaf const regx = findreg(retregs); - reg_t rreg = allocreg(cdb,resreg,e.Ety); + const rreg = allocreg(cdb,resreg,e.Ety); // IMUL regx,imm16 cdb.genc2(0x69,grex | modregxrmx(3,rreg,regx),e2factor); @@ -2628,7 +2628,7 @@ void cdloglog(ref CodeBuilder cdb,elem *e,regm_t *pretregs) if (!retregs) retregs = ALLREGS; // if mPSW only - reg_t reg = allocreg(cdb1,retregs,TYint); // allocate reg for result + const reg = allocreg(cdb1,retregs,TYint); // allocate reg for result movregconst(cdb1,reg,e.Eoper == OPoror,*pretregs & mPSW); regcon.immed.mval &= ~mask(reg); // mark reg as unavail *pretregs = retregs; @@ -2655,7 +2655,7 @@ void cdloglog(ref CodeBuilder cdb,elem *e,regm_t *pretregs) assert(sz <= 4); // result better be int regm_t retregs = *pretregs & allregs; - reg_t reg = allocreg(cdb1,retregs,TYint); // allocate reg for result + const reg = allocreg(cdb1,retregs,TYint); // allocate reg for result movregconst(cdb1,reg,e.Eoper == OPoror,0); // reg = 1 regcon.immed.mval &= ~mask(reg); // mark reg as unavail *pretregs = retregs; @@ -2689,7 +2689,7 @@ void cdloglog(ref CodeBuilder cdb,elem *e,regm_t *pretregs) retregs = ALLREGS; // if mPSW only CodeBuilder cdbcg; cdbcg.ctor(); - reg_t reg = allocreg(cdbcg,retregs,TYint); // allocate reg for result + const reg = allocreg(cdbcg,retregs,TYint); // allocate reg for result code *cg = cdbcg.finish(); for (code *c1 = cg; c1; c1 = code_next(c1)) // for each instruction cdb1.gen(c1); // duplicate it @@ -4261,7 +4261,7 @@ void cdmemset(ref CodeBuilder cdb,elem *e,regm_t *pretregs) STOSB */ regm_t regs = allregs & (*pretregs ? ~(mAX|mBX|mCX|mDI) : ~(mAX|mCX|mDI)); - reg_t sreg = allocreg(cdb,regs,TYint); + const sreg = allocreg(cdb,regs,TYint); genregs(cdb,0x89,CX,sreg); // MOV sreg,ECX (32 bits only) const n = I64 ? 3 : 2; @@ -4360,7 +4360,7 @@ private void cdmemsetn(ref CodeBuilder cdb,elem *e,regm_t *pretregs) mregbx = *pretregs & ~(mregidx | mregcx | retregs3); if (!mregbx) mregbx = allregs & ~(mregidx | mregcx | retregs3); - reg_t regbx = allocreg(cdb, mregbx, TYnptr); + const regbx = allocreg(cdb, mregbx, TYnptr); getregs(cdb, mregbx); genmovreg(cdb,regbx,idxreg); // MOV BX,DI } @@ -4588,7 +4588,7 @@ else code cs; cs.Iop = 0x8B; regm_t retregs = *pretregs; - reg_t reg = allocreg(cdb,retregs,tym); + const reg = allocreg(cdb,retregs,tym); reg_t msreg = findregmsw(retregs); buildEA(&cs,DI,-1,1,REGSIZE); @@ -4796,7 +4796,7 @@ void getoffset(ref CodeBuilder cdb,elem *e,reg_t reg) if (reg == STACK) { regm_t retregs = ALLREGS; - reg_t regx = allocreg(cdb,retregs,TYoffset); + const regx = allocreg(cdb,retregs,TYoffset); reg = findreg(retregs); stack = 1; } @@ -4933,7 +4933,7 @@ void getoffset(ref CodeBuilder cdb,elem *e,reg_t reg) if (reg == STACK) { regm_t retregs = ALLREGS; - reg_t regx = allocreg(cdb,retregs,TYoffset); + const regx = allocreg(cdb,retregs,TYoffset); reg = findreg(retregs); loadea(cdb,e,&cs,LEA,reg,0,0,0); // LEA reg,EA if (I64) @@ -5364,7 +5364,7 @@ if (config.exe & EX_windos) getregs(cdb,mES); // allocate ES } } - reg_t reg = allocreg(cdb,retregs,TYint); + const reg = allocreg(cdb,retregs,TYint); code_newreg(&cs, reg); if (sz == 1 && I64 && reg >= 4) cs.Irex |= REX; @@ -5473,8 +5473,6 @@ if (config.exe & EX_windos) else if (tyml == TYhptr) { uint rvalue; - reg_t lreg; - reg_t rtmp; regm_t mtmp; rvalue = e2.EV.Vlong; @@ -5487,7 +5485,7 @@ if (config.exe & EX_windos) regm_t retregs = mLSW & ~idxregs & *pretregs; if (!retregs) retregs = mLSW & ~idxregs; - lreg = allocreg(cdb,retregs,TYint); + const lreg = allocreg(cdb,retregs,TYint); // Can't use LES if the EA uses ES as a seg override if (*pretregs & mES && (cs.Iflags & CFSEG) != CFes) @@ -5511,7 +5509,7 @@ if (config.exe & EX_windos) // Allocate temporary register, rtmp mtmp = ALLREGS & ~mCX & ~idxregs & ~retregs; - rtmp = allocreg(cdb,mtmp,TYint); + const rtmp = allocreg(cdb,mtmp,TYint); movregconst(cdb,rtmp,rvalue >> 16,0); // MOV rtmp,e2+2 getregs(cdb,mtmp); @@ -5539,7 +5537,7 @@ if (config.exe & EX_windos) if ((retregs & mMSW) == 0) retregs |= ALLREGS & mMSW; assert(retregs & mMSW && retregs & mLSW); - reg_t reg = allocreg(cdb,retregs,tyml); + const reg = allocreg(cdb,retregs,tyml); uint sreg = findreglsw(retregs); cs.Iop = 0x8B; cs.Irm |= modregrm(0,sreg,0); diff --git a/compiler/src/dmd/backend/cod3.d b/compiler/src/dmd/backend/cod3.d index aeaacda62aa5..69fb302eda77 100644 --- a/compiler/src/dmd/backend/cod3.d +++ b/compiler/src/dmd/backend/cod3.d @@ -1792,9 +1792,9 @@ void doswitch(ref CodeBuilder cdb, block *b) * JMP R1 FF E0 */ regm_t scratchm = ALLREGS & ~mask(reg); - reg_t r1 = allocreg(cdb,scratchm,TYint); + const r1 = allocreg(cdb,scratchm,TYint); scratchm = ALLREGS & ~(mask(reg) | mask(r1)); - reg_t r2 = allocreg(cdb,scratchm,TYint); + const r2 = allocreg(cdb,scratchm,TYint); CodeBuilder cdbe; cdbe.ctor(); cdbe.genc1(LEA,(REX_W << 16) | modregxrm(0,r1,5),FLswitch,0); // LEA R1,disp[RIP] @@ -1849,7 +1849,7 @@ static if (JMPJMPTABLE) // Allocate scratch register jreg regm_t scratchm = ALLREGS & ~mask(reg); - reg_t jreg = allocreg(cdb,scratchm,TYint); + const jreg = allocreg(cdb,scratchm,TYint); // LEA jreg, offset ctable[reg][reg*4] cdb.genc1(LEA,modregrm(2,jreg,4),FLcode,6); @@ -1871,7 +1871,7 @@ else */ // Allocate scratch register r1 regm_t scratchm = ALLREGS & ~mask(reg); - reg_t r1 = allocreg(cdb,scratchm,TYint); + const r1 = allocreg(cdb,scratchm,TYint); cdb.genc2(CALL,0,0); // CALL L1 cdb.gen1(0x58 + r1); // L1: POP R1 @@ -1894,7 +1894,7 @@ else // Allocate scratch register r1 regm_t scratchm = ALLREGS & ~(mask(reg) | mBX); - reg_t r1 = allocreg(cdb,scratchm,TYint); + const r1 = allocreg(cdb,scratchm,TYint); genmovreg(cdb,r1,BX); // MOV R1,EBX cdb.genc1(0x2B,modregxrm(2,r1,4),FLswitch,0); // SUB R1,disp[reg*4][EBX] @@ -2676,7 +2676,7 @@ void cdframeptr(ref CodeBuilder cdb, elem *e, regm_t *pretregs) regm_t retregs = *pretregs & allregs; if (!retregs) retregs = allregs; - reg_t reg = allocreg(cdb,retregs, TYint); + const reg = allocreg(cdb,retregs, TYint); code cs; cs.Iop = ESCAPE | ESCframeptr; @@ -2700,7 +2700,7 @@ void cdgot(ref CodeBuilder cdb, elem *e, regm_t *pretregs) regm_t retregs = *pretregs & allregs; if (!retregs) retregs = allregs; - reg_t reg = allocreg(cdb,retregs, TYnptr); + const reg = allocreg(cdb,retregs, TYnptr); cdb.genc(CALL,0,0,0,FLgot,0); // CALL L1 cdb.gen1(0x58 + reg); // L1: POP reg @@ -2712,7 +2712,7 @@ void cdgot(ref CodeBuilder cdb, elem *e, regm_t *pretregs) regm_t retregs = *pretregs & allregs; if (!retregs) retregs = allregs; - reg_t reg = allocreg(cdb,retregs, TYnptr); + const reg = allocreg(cdb,retregs, TYnptr); cdb.genc2(CALL,0,0); // CALL L1 cdb.gen1(0x58 + reg); // L1: POP reg diff --git a/compiler/src/dmd/backend/cod4.d b/compiler/src/dmd/backend/cod4.d index d1082f75e36d..5f53b604a888 100644 --- a/compiler/src/dmd/backend/cod4.d +++ b/compiler/src/dmd/backend/cod4.d @@ -1471,7 +1471,7 @@ void cdmulass(ref CodeBuilder cdb,elem *e,regm_t *pretregs) regm_t regm = *pretregs & ~(idxregs | mBP | mR13); // don't use EBP if (!regm) regm = allregs & ~(idxregs | mBP | mR13); - reg_t reg = allocreg(cdb,regm,tyml); + const reg = allocreg(cdb,regm,tyml); cs.Iop = LOD; code_newreg(&cs,reg); cs.Irex |= rex; @@ -1511,8 +1511,8 @@ void cdmulass(ref CodeBuilder cdb,elem *e,regm_t *pretregs) regm_t regm = *pretregs & ~(idxregs | mBP | mR13); // don't use EBP if (!regm) regm = allregs & ~(idxregs | mBP | mR13); - reg_t reg = allocreg(cdb,regm,tyml); // return register - reg_t sreg = allocScratchReg(cdb, allregs & ~(regm | idxregs | mBP | mR13)); + const reg = allocreg(cdb,regm,tyml); // return register + const sreg = allocScratchReg(cdb, allregs & ~(regm | idxregs | mBP | mR13)); cs.Iop = LOD; code_newreg(&cs,sreg); @@ -2211,7 +2211,7 @@ void cddivass(ref CodeBuilder cdb,elem *e,regm_t *pretregs) else if (pow2 < 63) { scratchm = allregs & ~(retregs | scratchm); - reg_t r2 = allocreg(cdb,scratchm,TYint); + const r2 = allocreg(cdb,scratchm,TYint); cdb.genmovreg(r1,rhi); // MOV r1,rhi cdb.genc2(0xC1,grex | modregrmx(3,7,r1),REGSIZE * 8 - 1); // SAR r1,31 @@ -3309,14 +3309,12 @@ void longcmp(ref CodeBuilder cdb,elem *e,bool jcond,uint fltarg,code *targ) case OPvar: if (!e1.Ecount && e1.Eoper == OPs32_64) { - reg_t msreg; - retregs = allregs; scodelem(cdb,e1.EV.E1,&retregs,0,true); freenode(e1); reg = findreg(retregs); retregs = allregs & ~retregs; - msreg = allocreg(cdb,retregs,TYint); + const msreg = allocreg(cdb,retregs,TYint); genmovreg(cdb,msreg,reg); // MOV msreg,reg cdb.genc2(0xC1,modregrm(3,7,msreg),REGSIZE * 8 - 1); // SAR msreg,31 cse_flush(cdb,1); @@ -3834,7 +3832,7 @@ void cdbyteint(ref CodeBuilder cdb,elem *e,regm_t *pretregs) code cs; regm_t retregsx = *pretregs; - reg_t reg = allocreg(cdb,retregsx,TYint); + const reg = allocreg(cdb,retregsx,TYint); if (config.flags4 & CFG4speed && op == OPu8_16 && mask(reg) & BYTEREGS && config.target_cpu < TARGET_PentiumPro) @@ -4152,7 +4150,7 @@ void cdfar16(ref CodeBuilder cdb, elem *e, regm_t *pretregs) */ regm_t retregs = BYTEREGS & ~*pretregs; - reg_t rx = allocreg(cdb,retregs,TYint); + const rx = allocreg(cdb,retregs,TYint); cnop = gennop(null); int jop = JCXZ; if (reg != CX) @@ -4479,7 +4477,7 @@ void cdbscan(ref CodeBuilder cdb, elem *e, regm_t *pretregs) regm_t retregs = *pretregs & allregs; if (!retregs) retregs = allregs; - reg_t reg = allocreg(cdb,retregs, e.Ety); + const reg = allocreg(cdb,retregs, e.Ety); cs.Iop = (e.Eoper == OPbsf) ? 0x0FBC : 0x0FBD; // BSF/BSR reg,EA code_newreg(&cs, reg); @@ -4533,7 +4531,7 @@ void cdpopcnt(ref CodeBuilder cdb,elem *e,regm_t *pretregs) regm_t retregs = *pretregs & allregs; if (!retregs) retregs = allregs; - reg_t reg = allocreg(cdb,retregs, e.Ety); + const reg = allocreg(cdb,retregs, e.Ety); cs.Iop = POPCNT; // POPCNT reg,EA code_newreg(&cs, reg); @@ -4702,7 +4700,7 @@ void cdcmpxchg(ref CodeBuilder cdb, elem *e, regm_t *pretregs) { assert(tysize(e.Ety) == 1); assert(I64 || retregs & BYTEREGS); - reg_t reg = allocreg(cdb,retregs,TYint); + const reg = allocreg(cdb,retregs,TYint); uint ea = modregrmx(3,0,reg); if (I64 && reg >= 4) ea |= REX << 16;