Skip to content

Commit a328c7c

Browse files
authored
apply cgstate to callclib() (#22972)
1 parent 29e1bb4 commit a328c7c

File tree

4 files changed

+28
-28
lines changed

4 files changed

+28
-28
lines changed

compiler/src/dmd/backend/x86/cg87.d

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -619,7 +619,7 @@ private void genftst(ref CodeBuilder cdb,elem* e,int pop)
619619
// Call library function which does not raise exceptions
620620
regm_t regm = 0;
621621

622-
callclib(cdb,e,CLIB.ftest,regm,0);
622+
callclib(cgstate,cdb,e,CLIB.ftest,regm,0);
623623
if (pop)
624624
{
625625
cdb.genf2(0xDD,modregrm(3,3,0)); // FPOP
@@ -850,7 +850,7 @@ void fixresult87(ref CGstate cg,ref CodeBuilder cdb,elem* e,regm_t retregs, ref
850850
regm |= outretregs & mPSW;
851851
fixresult(cg,cdb,e,retregs,regm);
852852
regm = 0; // don't worry about result from CLIB.xxx
853-
callclib(cdb,e,
853+
callclib(cg,cdb,e,
854854
((sz == FLOATSIZE) ? CLIB.fltto87 : CLIB.dblto87),
855855
regm,0);
856856
}
@@ -1118,7 +1118,7 @@ void orth87(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
11181118
{
11191119
regm_t regm = 0;
11201120

1121-
callclib(cdb,e,CLIB.ftest0,regm,0);
1121+
callclib(cg,cdb,e,CLIB.ftest0,regm,0);
11221122
pop87();
11231123
}
11241124
else
@@ -1144,7 +1144,7 @@ void orth87(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
11441144
else
11451145
// Call a function instead so that exceptions
11461146
// are not generated.
1147-
callclib(cdb,e,CLIB.fcompp,resregm,0);
1147+
callclib(cg,cdb,e,CLIB.fcompp,resregm,0);
11481148
}
11491149
}
11501150

@@ -1230,7 +1230,7 @@ void orth87(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
12301230
else
12311231
{
12321232
int clib = eoper == OPmul ? CLIB.cmul : CLIB.cdiv;
1233-
callclib(cdb, e, clib, retregs, 0);
1233+
callclib(cg,cdb, e, clib, retregs, 0);
12341234
}
12351235
fixresult_complex87(cg, cdb, e, retregs, pretregs);
12361236
return;
@@ -1288,7 +1288,7 @@ void orth87(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
12881288
makesure87(cdb, e1, sz2, 2, 0);
12891289
makesure87(cdb, e1, 0, 3, 0);
12901290
regm_t retregs = 0;
1291-
callclib(cdb, e, CLIB.ccmp, retregs, 0);
1291+
callclib(cg,cdb, e, CLIB.ccmp, retregs, 0);
12921292
return;
12931293
}
12941294

@@ -1538,7 +1538,7 @@ void orth87(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
15381538
makesure87(cdb, e1,0,1,0);
15391539
if (op == 7) // if reverse divide
15401540
cdb.genf2(0xD9,0xC8 + 1); // FXCH ST(1)
1541-
callclib(cdb,e,CLIB.fdiv87,retregs,0);
1541+
callclib(cg,cdb,e,CLIB.fdiv87,retregs,0);
15421542
pop87();
15431543
regm_t resregm = mST0;
15441544
freenode(e2);
@@ -2328,7 +2328,7 @@ public void opass87(ref CGstate cg,ref CodeBuilder cdb,elem* e,ref regm_t pretre
23282328
cs.Irm |= modregrm(0, 5, 0); // FLD tbyte ptr ...
23292329
cdb.gen(&cs);
23302330
cdb.genf2(0xD9,0xC8 + 1); // FXCH ST(1)
2331-
callclib(cdb,e,CLIB.fdiv87,retregs,0);
2331+
callclib(cg,cdb,e,CLIB.fdiv87,retregs,0);
23322332
pop87();
23332333
}
23342334
else if (e.Eoper == OPmodass)
@@ -2697,7 +2697,7 @@ private void opass_complex87(ref CGstate cg,ref CodeBuilder cdb,elem* e,ref regm
26972697
cs.IEV1.Voffset += sz2;
26982698
cdb.gen(&cs); // FLD e.E1.im
26992699
retregs = mST01;
2700-
callclib(cdb, e, CLIB.cmul, retregs, 0);
2700+
callclib(cg,cdb, e, CLIB.cmul, retregs, 0);
27012701
goto L2;
27022702
}
27032703
else
@@ -2708,7 +2708,7 @@ private void opass_complex87(ref CGstate cg,ref CodeBuilder cdb,elem* e,ref regm
27082708
cs.IEV1.Voffset += sz2;
27092709
cdb.gen(&cs); // FLD e.E1.im
27102710
retregs = mST01;
2711-
callclib(cdb, e, CLIB.cmul, retregs, 0);
2711+
callclib(cg,cdb, e, CLIB.cmul, retregs, 0);
27122712
if (pretregs & (mST01 | mPSW))
27132713
{
27142714
cs.Irm |= modregrm(0, 2, 0);
@@ -2744,7 +2744,7 @@ private void opass_complex87(ref CGstate cg,ref CodeBuilder cdb,elem* e,ref regm
27442744
cdb.gen(&cs); // FLD e.E1.im
27452745
cdb.genf2(0xD9,0xC8 + 2); // FXCH ST(2)
27462746
retregs = mST01;
2747-
callclib(cdb, e, CLIB.cdiv, retregs, idxregs);
2747+
callclib(cg,cdb, e, CLIB.cdiv, retregs, idxregs);
27482748
goto L2;
27492749
}
27502750
else
@@ -2757,7 +2757,7 @@ private void opass_complex87(ref CGstate cg,ref CodeBuilder cdb,elem* e,ref regm
27572757
cdb.gen(&cs); // FLD e.E1.im
27582758
cdb.genf2(0xD9,0xC8 + 2); // FXCH ST(2)
27592759
retregs = mST01;
2760-
callclib(cdb, e, CLIB.cdiv, retregs, idxregs);
2760+
callclib(cg,cdb, e, CLIB.cdiv, retregs, idxregs);
27612761
if (pretregs & (mST01 | mPSW))
27622762
{
27632763
cs.Irm |= modregrm(0, 2, 0);
@@ -3219,12 +3219,12 @@ void cnvt87(ref CGstate cg,ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
32193219
if (clib == CLIB.dblllng)
32203220
{ retregs = I32 ? DOUBLEREGS_32 : DOUBLEREGS_16;
32213221
codelem(cg,cdb,e.E1,retregs,false);
3222-
callclib(cdb,e,clib,pretregs,0);
3222+
callclib(cg,cdb,e,clib,pretregs,0);
32233223
}
32243224
else
32253225
{ retregs = mST0; //I32 ? DOUBLEREGS_32 : DOUBLEREGS_16;
32263226
codelem(cg,cdb,e.E1,retregs,false);
3227-
callclib(cdb,e,clib,pretregs,0);
3227+
callclib(cg,cdb,e,clib,pretregs,0);
32283228
pop87();
32293229
}
32303230
}

compiler/src/dmd/backend/x86/cod1.d

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2842,7 +2842,7 @@ void getClibInfo(uint clib, Symbol** ps, ClibInfo** pinfo, objfmt_t objfmt, exef
28422842
*/
28432843

28442844
@trusted
2845-
void callclib(ref CodeBuilder cdb, elem* e, uint clib, ref regm_t pretregs, regm_t keepmask)
2845+
void callclib(ref CGstate cg, ref CodeBuilder cdb, elem* e, uint clib, ref regm_t pretregs, regm_t keepmask)
28462846
{
28472847
//printf("callclib(e = %p, clib = %d, pretregs = %s, keepmask = %s\n", e, clib, regm_str(pretregs), regm_str(keepmask));
28482848
//elem_print(e);

compiler/src/dmd/backend/x86/cod2.d

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ void opdouble(ref CodeBuilder cdb, elem* e,ref regm_t pretregs,uint clib)
170170
scodelem(cgstate,cdb,e.E2, retregs2, retregs1 & ~mSTACK, false);
171171
if (retregs1 & mSTACK)
172172
cgstate.stackclean--;
173-
callclib(cdb, e, clib, pretregs, 0);
173+
callclib(cgstate,cdb, e, clib, pretregs, 0);
174174
}
175175

176176
/*****************************
@@ -1217,7 +1217,7 @@ void cdmul(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
12171217
{
12181218
regm_t rretregs = mCX | mBX; // second arg
12191219
scodelem(cgstate,cdb,e2,rretregs,retregs,true); // get rvalue
1220-
callclib(cdb,e,CLIB.lmul,pretregs,0);
1220+
callclib(cg,cdb,e,CLIB.lmul,pretregs,0);
12211221
return;
12221222
}
12231223
}
@@ -1950,7 +1950,7 @@ void cddiv(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
19501950
}
19511951

19521952
regm_t keepregs = I32 ? mSI | mDI : 0;
1953-
callclib(cdb,e,lib,pretregs,keepregs);
1953+
callclib(cg,cdb,e,lib,pretregs,keepregs);
19541954
}
19551955
else
19561956
assert(0);
@@ -5287,13 +5287,13 @@ if (config.exe & EX_windos)
52875287
if (tyml == TYdouble || tyml == TYdouble_alias)
52885288
{
52895289
retregs = DOUBLEREGS;
5290-
callclib(cdb,e,(op == OPpostinc) ? CLIB.dadd : CLIB.dsub,
5290+
callclib(cg,cdb,e,(op == OPpostinc) ? CLIB.dadd : CLIB.dsub,
52915291
retregs,idxregs);
52925292
}
52935293
else /* tyml == TYfloat */
52945294
{
52955295
retregs = FLOATREGS;
5296-
callclib(cdb,e,(op == OPpostinc) ? CLIB.fadd : CLIB.fsub,
5296+
callclib(cg,cdb,e,(op == OPpostinc) ? CLIB.fadd : CLIB.fsub,
52975297
retregs,idxregs);
52985298
}
52995299
cs.Iop = 0x89; /* MOV EA,DOUBLEREGS */

compiler/src/dmd/backend/x86/cod4.d

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ private void opassdbl(ref CGstate cg,ref CodeBuilder cdb,elem* e,ref regm_t pret
218218
cg.stackclean++;
219219
scodelem(cg,cdb,e.E2,retregs2,idxregs,false);
220220
cg.stackclean--;
221-
callclib(cdb,e,clib,retregs,0);
221+
callclib(cg,cdb,e,clib,retregs,0);
222222
if (e1.Ecount)
223223
cssave(e1,retregs,!OTleaf(e1.Eoper)); // if lvalue is a CSE
224224
freenode(e1);
@@ -1679,7 +1679,7 @@ void cdmulass(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
16791679
}
16801680
else
16811681
{
1682-
callclib(cdb,e,CLIB.lmul,retregs,idxregm(&cs));
1682+
callclib(cg,cdb,e,CLIB.lmul,retregs,idxregm(&cs));
16831683
}
16841684
}
16851685

@@ -2270,7 +2270,7 @@ void cddivass(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
22702270
uint lib = uns ? CLIB.uldiv : CLIB.ldiv;
22712271
if (op == OPmodass)
22722272
++lib;
2273-
callclib(cdb,e,lib,retregs,idxregm(&cs));
2273+
callclib(cg,cdb,e,lib,retregs,idxregm(&cs));
22742274

22752275
opAssStorePair(cg, cdb, cs, e, findregmsw(retregs), findreglsw(retregs), pretregs);
22762276
}
@@ -2615,7 +2615,7 @@ void cdcmp(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
26152615
clib += CLIB.dtst0exc - CLIB.dtst0;
26162616
codelem(cg,cdb,e1,retregs,false);
26172617
retregs = 0;
2618-
callclib(cdb,e,clib,retregs,0);
2618+
callclib(cg,cdb,e,clib,retregs,0);
26192619
freenode(e2);
26202620
}
26212621
else
@@ -2651,7 +2651,7 @@ void cdcmp(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
26512651
if (I16)
26522652
{
26532653
retregs = 0;
2654-
callclib(cdb,e,CLIB.lcmp,retregs,0); // gross, but it works
2654+
callclib(cg,cdb,e,CLIB.lcmp,retregs,0); // gross, but it works
26552655
}
26562656
else
26572657
{
@@ -3591,7 +3591,7 @@ void cdcnvt(ref CGstate cg, ref CodeBuilder cdb, elem* e, ref regm_t pretregs)
35913591
{
35923592
regm_t retregsx = I64 ? mAX : mAX|mDX;
35933593
codelem(cg,cdb,e.E1,retregsx,false);
3594-
callclib(cdb,e,CLIB.u64_ldbl,pretregs,0);
3594+
callclib(cg,cdb,e,CLIB.u64_ldbl,pretregs,0);
35953595
return;
35963596
}
35973597
break;
@@ -3605,7 +3605,7 @@ void cdcnvt(ref CGstate cg, ref CodeBuilder cdb, elem* e, ref regm_t pretregs)
36053605
}
36063606
regm_t retregsx = mST0;
36073607
codelem(cg,cdb,e.E1,retregsx,false);
3608-
callclib(cdb,e,CLIB.ld_u64,pretregs,0);
3608+
callclib(cg,cdb,e,CLIB.ld_u64,pretregs,0);
36093609
return;
36103610
}
36113611

@@ -3621,7 +3621,7 @@ L1:
36213621
assert(i < clib.length);
36223622
if (clib[i][0] == e.Eoper)
36233623
{
3624-
callclib(cdb,e,clib[i][1],pretregs,0);
3624+
callclib(cg,cdb,e,clib[i][1],pretregs,0);
36253625
break;
36263626
}
36273627
}

0 commit comments

Comments
 (0)