optimized getCSC
This commit is contained in:
parent
ea478eec2c
commit
d2d39a606f
@ -2379,32 +2379,13 @@ void NgUltraImpl::postPlace()
|
|||||||
|
|
||||||
BelId NgUltraPacker::getCSC(Loc l, int row)
|
BelId NgUltraPacker::getCSC(Loc l, int row)
|
||||||
{
|
{
|
||||||
BelId bel = ctx->getBelByLocation(Loc(l.x+1,l.y+2,0));
|
const int z_loc[] = { 0, 15, 16, 31 };
|
||||||
if (!ctx->getBoundBelCell(bel) && (row==0 || row==1)) return bel;
|
for(int j=0;j<3;j++) {
|
||||||
bel = ctx->getBelByLocation(Loc(l.x+1,l.y+2,15));
|
for(int i=0;i<4;i++) {
|
||||||
if (!ctx->getBoundBelCell(bel) && (row==0 || row==2)) return bel;
|
BelId bel = ctx->getBelByLocation(Loc(l.x+j+1,l.y+j%2+2,z_loc[i]));
|
||||||
bel = ctx->getBelByLocation(Loc(l.x+1,l.y+2,16));
|
if (!ctx->getBoundBelCell(bel) && (row==0 || row==(i+1))) return bel;
|
||||||
if (!ctx->getBoundBelCell(bel) && (row==0 || row==3)) return bel;
|
}
|
||||||
bel = ctx->getBelByLocation(Loc(l.x+1,l.y+2,31));
|
}
|
||||||
if (!ctx->getBoundBelCell(bel) && (row==0 || row==4)) return bel;
|
|
||||||
|
|
||||||
bel = ctx->getBelByLocation(Loc(l.x+2,l.y+3,0));
|
|
||||||
if (!ctx->getBoundBelCell(bel) && (row==0 || row==1)) return bel;
|
|
||||||
bel = ctx->getBelByLocation(Loc(l.x+2,l.y+3,15));
|
|
||||||
if (!ctx->getBoundBelCell(bel) && (row==0 || row==2)) return bel;
|
|
||||||
bel = ctx->getBelByLocation(Loc(l.x+2,l.y+3,16));
|
|
||||||
if (!ctx->getBoundBelCell(bel) && (row==0 || row==3)) return bel;
|
|
||||||
bel = ctx->getBelByLocation(Loc(l.x+2,l.y+3,31));
|
|
||||||
if (!ctx->getBoundBelCell(bel) && (row==0 || row==4)) return bel;
|
|
||||||
|
|
||||||
bel = ctx->getBelByLocation(Loc(l.x+3,l.y+2,0));
|
|
||||||
if (!ctx->getBoundBelCell(bel) && (row==0 || row==1)) return bel;
|
|
||||||
bel = ctx->getBelByLocation(Loc(l.x+3,l.y+2,15));
|
|
||||||
if (!ctx->getBoundBelCell(bel) && (row==0 || row==2)) return bel;
|
|
||||||
bel = ctx->getBelByLocation(Loc(l.x+3,l.y+2,16));
|
|
||||||
if (!ctx->getBoundBelCell(bel) && (row==0 || row==3)) return bel;
|
|
||||||
bel = ctx->getBelByLocation(Loc(l.x+3,l.y+2,31));
|
|
||||||
if (!ctx->getBoundBelCell(bel) && (row==0 || row==4)) return bel;
|
|
||||||
return BelId();
|
return BelId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user