Skip to content

Commit 12ef7ba

Browse files
committed
CodeBuilder: genmovreg()
1 parent fa6ef28 commit 12ef7ba

File tree

8 files changed

+156
-165
lines changed

8 files changed

+156
-165
lines changed

dm/src/dmc/cg87.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
* Copyright: Copyright (C) 1987-1995 by Symantec
66
* Copyright (c) 2000-2017 by Digital Mars, All Rights Reserved
77
* Authors: $(LINK2 http://www.digitalmars.com, Walter Bright)
8-
* License: Distributed under the Boost Software License, Version 1.0.
9-
* http://www.boost.org/LICENSE_1_0.txt
10-
* Source: https://github.com/dlang/dmd/blob/master/src/ddmd/backend/cg87.c
8+
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
9+
* Source: $(LINK2 https://github.com/dlang/dmd/blob/master/src/ddmd/backend/cg87.c, backend/cg87.c)
1110
*/
1211

1312
#if !SPP
@@ -3221,10 +3220,10 @@ void cnvt87(CodeBuilder& cdb,elem *e,regm_t *pretregs)
32213220

32223221
if (szoff > REGSIZE)
32233222
{ szpush -= REGSIZE;
3224-
cdb.append(genpop(CNIL,findreglsw(retregs))); // POP lsw
3223+
genpop(cdb,findreglsw(retregs)); // POP lsw
32253224
}
32263225
szpush -= REGSIZE;
3227-
cdb.append(genpop(CNIL,reg)); // POP reg
3226+
genpop(cdb,reg); // POP reg
32283227

32293228
if (szpush)
32303229
cod3_stackadj(cdb, -szpush);

dm/src/dmc/cgcod.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
* Copyright: Copyright (C) 1985-1998 by Symantec
66
* Copyright (c) 2000-2017 by Digital Mars, All Rights Reserved
77
* Authors: $(LINK2 http://www.digitalmars.com, Walter Bright)
8-
* License: Distributed under the Boost Software License, Version 1.0.
9-
* http://www.boost.org/LICENSE_1_0.txt
10-
* Source: https://github.com/dlang/dmd/blob/master/src/ddmd/backend/cgcod.c
8+
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
9+
* Source: $(LINK2 https://github.com/dlang/dmd/blob/master/src/ddmd/backend/cgcod.c, backend/cgcod.c)
1110
*/
1211

1312
#if !SPP
@@ -2142,7 +2141,7 @@ static void cse_save(CodeBuilder& cdb, regm_t ms)
21422141
csextab[i].flags |= CSEsimple;
21432142
else
21442143
{
2145-
cdb.append(gensavereg(reg, i));
2144+
gensavereg(cdb, reg, i);
21462145
reflocal = TRUE;
21472146
}
21482147
}
@@ -2831,7 +2830,7 @@ void scodelem(CodeBuilder& cdb, elem *e,regm_t *pretregs,regm_t keepmsk,bool con
28312830
{ regm_t mj = mask[j];
28322831

28332832
if (touse & mj)
2834-
{ cs1 = genmovreg(cs1,j,i);
2833+
{ cs1 = cat(cs1,genmovreg(CNIL,j,i));
28352834
cs2 = cat(genmovreg(CNIL,i,j),cs2);
28362835
touse &= ~mj;
28372836
mfuncreg &= ~mj;

dm/src/dmc/cgxmm.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44
*
55
* Copyright: Copyright (c) 2011-2017 by Digital Mars, All Rights Reserved
66
* Authors: $(LINK2 http://www.digitalmars.com, Walter Bright)
7-
* License: Distributed under the Boost Software License, Version 1.0.
8-
* http://www.boost.org/LICENSE_1_0.txt
9-
* Source: https://github.com/dlang/dmd/blob/master/src/ddmd/backend/cgxmm.c
7+
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8+
* Source: $(LINK2 https://github.com/dlang/dmd/blob/master/src/ddmd/backend/cgxmm.c, backend/cgxmm.c)
109
*/
1110

1211
#if !SPP
@@ -405,7 +404,7 @@ void xmmcnvt(CodeBuilder& cdb,elem *e,regm_t *pretregs)
405404
else if (zx)
406405
{ assert(I64);
407406
getregs(cdb,regs);
408-
cdb.append(genregs(CNIL,STO,reg,reg)); // MOV reg,reg to zero upper 32-bit
407+
genregs(cdb,STO,reg,reg); // MOV reg,reg to zero upper 32-bit
409408
code_orflag(cdb.last(),CFvolatile);
410409
}
411410

dm/src/dmc/cod1.c

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
* Copyright: Copyright (C) 1984-1998 by Symantec
66
* Copyright (c) 2000-2017 by Digital Mars, All Rights Reserved
77
* Authors: $(LINK2 http://www.digitalmars.com, Walter Bright)
8-
* License: Distributed under the Boost Software License, Version 1.0.
9-
* http://www.boost.org/LICENSE_1_0.txt
10-
* Source: https://github.com/dlang/dmd/blob/master/src/ddmd/backend/cod1.c
8+
* License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
9+
* Source: $(LINK2 https://github.com/dlang/dmd/blob/master/src/ddmd/backend/cod1.c, backend/cod1.c)
1110
*/
1211

1312
#if !SPP
@@ -373,7 +372,7 @@ void genstackclean(CodeBuilder& cdb,unsigned numpara,regm_t keepmsk)
373372
!config.windows &&
374373
!(regcon.mvar & fregsaved) // and no registers will be pushed
375374
)
376-
cdb.append(genregs(CNIL,0x89,BP,SP)); // MOV SP,BP
375+
genregs(cdb,0x89,BP,SP); // MOV SP,BP
377376
else
378377
#endif
379378
{ regm_t scratchm = 0;
@@ -668,7 +667,7 @@ void loadea(CodeBuilder& cdb,elem *e,code *cs,unsigned op,unsigned reg,targ_size
668667
code_orrex(cdb.last(), REX_W);
669668
}
670669
else if (reg == 6) // if DIV
671-
cdb.append(genregs(CNIL,0x33,DX,DX)); // XOR DX,DX
670+
genregs(cdb,0x33,DX,DX); // XOR DX,DX
672671
}
673672

674673
// Eliminate MOV reg,reg
@@ -1024,7 +1023,7 @@ void getlvalue(CodeBuilder& cdb,code *pcs,elem *e,regm_t keepmsk)
10241023
allocreg(cdb,&idxregs,&msreg,TYfptr);
10251024
msreg = findregmsw(idxregs);
10261025
/* MOV msreg,segreg */
1027-
cdb.append(genregs(CNIL,0x8C,segfl[f],msreg));
1026+
genregs(cdb,0x8C,segfl[f],msreg);
10281027
}
10291028
opsave = pcs->Iop;
10301029
flagsave = pcs->Iflags;
@@ -1521,7 +1520,7 @@ void tstresult(CodeBuilder& cdb,regm_t regm,tym_t tym,unsigned saveflag)
15211520
if (sz == 1)
15221521
{
15231522
assert(regm & BYTEREGS);
1524-
cdb.append(genregs(CNIL,0x84,reg,reg)); // TEST regL,regL
1523+
genregs(cdb,0x84,reg,reg); // TEST regL,regL
15251524
if (I64 && reg >= 4)
15261525
code_orrex(cdb.last(), REX);
15271526
return;
@@ -1562,14 +1561,14 @@ void tstresult(CodeBuilder& cdb,regm_t regm,tym_t tym,unsigned saveflag)
15621561
cdb.gen2(0xD1,modregrmx(3,4,reg)); // SHL reg,1
15631562
return;
15641563
}
1565-
cdb.append(gentstreg(CNIL,reg)); // TEST reg,reg
1564+
gentstreg(cdb,reg); // TEST reg,reg
15661565
if (sz == SHORTSIZE)
15671566
cdb.last()->Iflags |= CFopsize; // 16 bit operands
15681567
else if (sz == 8)
15691568
code_orrex(cdb.last(), REX_W);
15701569
}
15711570
else
1572-
cdb.append(gentstreg(CNIL,reg)); // TEST reg,reg
1571+
gentstreg(cdb,reg); // TEST reg,reg
15731572
return;
15741573
}
15751574

@@ -1585,7 +1584,7 @@ void tstresult(CodeBuilder& cdb,regm_t regm,tym_t tym,unsigned saveflag)
15851584
if (I32)
15861585
{
15871586
if (tyfv(tym))
1588-
cdb.append(genregs(CNIL,0x0FB7,scrreg,reg)); // MOVZX scrreg,msreg
1587+
genregs(cdb,0x0FB7,scrreg,reg); // MOVZX scrreg,msreg
15891588
else
15901589
{ cdb.append(genmovreg(CNIL,scrreg,reg)); // MOV scrreg,msreg
15911590
if (tym == TYdouble || tym == TYdouble_alias)
@@ -1599,17 +1598,17 @@ void tstresult(CodeBuilder& cdb,regm_t regm,tym_t tym,unsigned saveflag)
15991598
cdb.gen2(0xD1,modregrm(3,4,scrreg)); // SHL scrreg,1
16001599
}
16011600
reg = findreglsw(regm);
1602-
cdb.append(genorreg(CNIL,scrreg,reg)); // OR scrreg,lsreg
1601+
genorreg(cdb,scrreg,reg); // OR scrreg,lsreg
16031602
}
16041603
else if (sz == 8)
16051604
{
16061605
// !I32
16071606
cdb.append(genmovreg(CNIL,scrreg,AX)); // MOV scrreg,AX
16081607
if (tym == TYdouble || tym == TYdouble_alias)
16091608
cdb.gen2(0xD1,modregrm(3,4,scrreg)); // SHL scrreg,1
1610-
cdb.append(genorreg(CNIL,scrreg,BX)); // OR scrreg,BX
1611-
cdb.append(genorreg(CNIL,scrreg,CX)); // OR scrreg,CX
1612-
cdb.append(genorreg(CNIL,scrreg,DX)); // OR scrreg,DX
1609+
genorreg(cdb,scrreg,BX); // OR scrreg,BX
1610+
genorreg(cdb,scrreg,CX); // OR scrreg,CX
1611+
genorreg(cdb,scrreg,DX); // OR scrreg,DX
16131612
}
16141613
else
16151614
assert(0);
@@ -1625,7 +1624,7 @@ void tstresult(CodeBuilder& cdb,regm_t regm,tym_t tym,unsigned saveflag)
16251624
getregs(cdb,mask[reg]); // we're going to trash reg
16261625
if (tyfloating(tym) && sz == 2 * intsize)
16271626
cdb.gen2(0xD1,modregrm(3,4,reg)); // SHL reg,1
1628-
cdb.append(genorreg(CNIL,reg,findreglsw(regm))); // OR reg,reg+1
1627+
genorreg(cdb,reg,findreglsw(regm)); // OR reg,reg+1
16291628
if (I64)
16301629
code_orrex(cdb.last(), REX_W);
16311630
}
@@ -1634,9 +1633,9 @@ void tstresult(CodeBuilder& cdb,regm_t regm,tym_t tym,unsigned saveflag)
16341633
getregs(cdb,mAX); // allocate AX
16351634
if (tym == TYdouble || tym == TYdouble_alias)
16361635
cdb.gen2(0xD1,modregrm(3,4,AX)); // SHL AX,1
1637-
cdb.append(genorreg(CNIL,AX,BX)); // OR AX,BX
1638-
cdb.append(genorreg(CNIL,AX,CX)); // OR AX,CX
1639-
cdb.append(genorreg(CNIL,AX,DX)); // OR AX,DX
1636+
genorreg(cdb,AX,BX); // OR AX,BX
1637+
genorreg(cdb,AX,CX); // OR AX,CX
1638+
genorreg(cdb,AX,DX); // OR AX,DX
16401639
}
16411640
else
16421641
assert(0);
@@ -3853,7 +3852,7 @@ void pushParams(CodeBuilder& cdb,elem *e,unsigned stackalign)
38533852
regm_t retregs = allregs;
38543853
unsigned reg;
38553854
allocreg(cdb,&retregs,&reg,TYoffset);
3856-
cdb.append(genregs(CNIL,0x89,SP,reg)); // MOV reg,SP
3855+
genregs(cdb,0x89,SP,reg); // MOV reg,SP
38573856
if (I64)
38583857
code_orrex(cdb.last(), REX_W);
38593858
unsigned np = stackpush - e->EV.Vuns; // stack delta to parameter
@@ -4145,7 +4144,7 @@ void pushParams(CodeBuilder& cdb,elem *e,unsigned stackalign)
41454144
regm_t retregs;
41464145
offsetinreg(cdb,e,&retregs);
41474146
unsigned reg = findreg(retregs);
4148-
cdb.append(genpush(CNIL,reg)); // PUSH reg
4147+
genpush(cdb,reg); // PUSH reg
41494148
cdb.append(genadjesp(CNIL,REGSIZE));
41504149
}
41514150
return;
@@ -4302,7 +4301,7 @@ void pushParams(CodeBuilder& cdb,elem *e,unsigned stackalign)
43024301
{
43034302
regwithvalue(cdb,allregs,value,&reg,0);
43044303
Preg:
4305-
cdb.append(genpush(CNIL,reg)); // PUSH reg
4304+
genpush(cdb,reg); // PUSH reg
43064305
}
43074306
code_orflag(cdb.last(),flag); // operand size
43084307
} while (i);
@@ -4381,7 +4380,7 @@ void pushParams(CodeBuilder& cdb,elem *e,unsigned stackalign)
43814380
retregs = IDXREGS; // get an index reg
43824381
unsigned reg;
43834382
allocreg(cdb,&retregs,&reg,TYoffset);
4384-
cdb.append(genregs(CNIL,0x89,SP,reg)); // MOV reg,SP
4383+
genregs(cdb,0x89,SP,reg); // MOV reg,SP
43854384
pop87();
43864385
cdb.gen2(op,modregrm(0,r,regtorm[reg])); // FSTP [reg]
43874386
}
@@ -4401,13 +4400,13 @@ void pushParams(CodeBuilder& cdb,elem *e,unsigned stackalign)
44014400
stackpush += sz;
44024401
if (sz <= REGSIZE)
44034402
{
4404-
cdb.append(genpush(CNIL,findreg(retregs))); // PUSH reg
4403+
genpush(cdb,findreg(retregs)); // PUSH reg
44054404
cdb.append(genadjesp(CNIL,REGSIZE));
44064405
}
44074406
else if (sz == REGSIZE * 2)
44084407
{
4409-
cdb.append(genpush(CNIL,findregmsw(retregs))); // PUSH msreg
4410-
cdb.append(genpush(CNIL,findreglsw(retregs))); // PUSH lsreg
4408+
genpush(cdb,findregmsw(retregs)); // PUSH msreg
4409+
genpush(cdb,findreglsw(retregs)); // PUSH lsreg
44114410
cdb.append(genadjesp(CNIL,sz));
44124411
}
44134412
}
@@ -4496,7 +4495,7 @@ void loaddata(CodeBuilder& cdb,elem *e,regm_t *pretregs)
44964495
if (e->Eoper == OPconst)
44974496
{ /* TRUE: OR SP,SP (SP is never 0) */
44984497
/* FALSE: CMP SP,SP (always equal) */
4499-
cdb.append(genregs(CNIL,(boolres(e)) ? 0x09 : 0x39,SP,SP));
4498+
genregs(cdb,(boolres(e)) ? 0x09 : 0x39,SP,SP);
45004499
if (I64)
45014500
code_orrex(cdb.last(), REX_W);
45024501
}
@@ -4651,7 +4650,7 @@ void loaddata(CodeBuilder& cdb,elem *e,regm_t *pretregs)
46514650
if (forregs & mES)
46524651
{
46534652
movregconst(cdb,reg,msw,0); // MOV reg,segment
4654-
cdb.append(genregs(CNIL,0x8E,0,reg)); // MOV ES,reg
4653+
genregs(cdb,0x8E,0,reg); // MOV ES,reg
46554654
msw = lsw; // MOV reg,offset
46564655
}
46574656
else

0 commit comments

Comments
 (0)