Skip to content

Commit 28f246f

Browse files
authored
use gensaverestore() for AArch64 (#22507)
1 parent da0b740 commit 28f246f

File tree

1 file changed

+7
-31
lines changed
  • compiler/src/dmd/backend/arm

1 file changed

+7
-31
lines changed

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

Lines changed: 7 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1904,23 +1904,11 @@ void cdfunc(ref CGstate cg, ref CodeBuilder cdb, elem* e, ref regm_t pretregs)
19041904

19051905
movParams(cg, cdbparams, ep, p.offset, sz);
19061906

1907-
regm_t tosave = keepmsk & ~cg.msavereg;
1907+
regm_t tosave = keepmsk & ~cg.msavereg; // registers to save and restore
19081908
cg.msavereg &= ~keepmsk | overlap;
1909-
1910-
// tosave is the mask to save and restore
1911-
for (reg_t j = 0; tosave; j++)
1912-
{
1913-
regm_t mi = mask(j);
1914-
if (mi & tosave)
1915-
{
1916-
uint idx;
1917-
cg.regsave.save(cdbsave, j, idx);
1918-
cg.regsave.restore(cdbrestore, j, idx);
1919-
saved |= mi;
1920-
keepmsk &= ~mi; // don't need to keep these for rest of params
1921-
tosave &= ~mi;
1922-
}
1923-
}
1909+
saved |= tosave;
1910+
keepmsk &= ~tosave; // don't need to keep these for rest of params
1911+
gensaverestore(tosave,cdbsave,cdbrestore);
19241912

19251913
cdb.append(cdbsave);
19261914
cdb.append(cdbparams);
@@ -1954,21 +1942,9 @@ void cdfunc(ref CGstate cg, ref CodeBuilder cdb, elem* e, ref regm_t pretregs)
19541942
if (keepmsk & retregs)
19551943
{
19561944
regm_t tosave = keepmsk & retregs;
1957-
1958-
// tosave is the mask to save and restore
1959-
for (reg_t j = 0; tosave; j++)
1960-
{
1961-
regm_t mi = mask(j);
1962-
if (mi & tosave)
1963-
{
1964-
uint idx;
1965-
cg.regsave.save(cdbsave, j, idx);
1966-
cg.regsave.restore(cdbrestore, j, idx);
1967-
saved |= mi;
1968-
keepmsk &= ~mi; // don't need to keep these for rest of params
1969-
tosave &= ~mi;
1970-
}
1971-
}
1945+
saved |= tosave;
1946+
keepmsk &= ~tosave; // don't need to keep these for rest of params
1947+
gensaverestore(tosave,cdbsave,cdbrestore);
19721948
}
19731949
cdb.append(cdbsave);
19741950

0 commit comments

Comments
 (0)