tmp
authoryu.dongliang <18588496441@163.com>
Wed, 8 Nov 2023 06:12:00 +0000 (14:12 +0800)
committeryu.dongliang <18588496441@163.com>
Wed, 8 Nov 2023 06:12:00 +0000 (14:12 +0800)
ses_layout.c

index 23083df3af9abea0951deedd2846a333c9798b28..d0049a3bb838a2b50637f662e3eafe9f8f0b2786 100644 (file)
@@ -556,6 +556,25 @@ static inline void eline_mov_before(ScfEfunction* f, intptr_t dst, intptr_t src)
        scf_logd("f->elines[%ld]->id: %ld, f->elines[%ld]->id: %ld\n", src, f->elines[src]->id, dst, f->elines[dst]->id);
 }
 
+static inline void eline_mov_after(ScfEfunction* f, intptr_t dst, intptr_t src)
+{
+       if (dst == src)
+               return;
+
+       ScfEline* el = f->elines[src];
+       intptr_t  i;
+
+       for (i = src + 1; i < f->n_elines; i++)
+               f->elines[i - 1] = f->elines[i];
+
+       for (i = f->n_elines - 1; i > dst + 1; i--)
+               f->elines[i] = f->elines[i - 1];
+
+       f->elines[dst + 1] = el;
+
+       scf_logd("f->elines[%ld]->id: %ld, f->elines[%ld]->id: %ld\n", src, f->elines[src]->id, dst, f->elines[dst]->id);
+}
+
 int _topo_print(scf_vector_t* paths);
 
 static void __ses_layout_path2(ScfEfunction* f, ses_path_t* path, ses_path_t* base)
@@ -565,7 +584,7 @@ static void __ses_layout_path2(ScfEfunction* f, ses_path_t* path, ses_path_t* ba
        ScfEpin*       bp;
        ScfEpin*       p;
        ScfEpin*       pb;
-       ScfEpin*       pc;
+       ScfEpin*       pe;
 
        intptr_t j;
        intptr_t k;
@@ -588,7 +607,7 @@ static void __ses_layout_path2(ScfEfunction* f, ses_path_t* path, ses_path_t* ba
                        if (p->lid == bp->lid) {
                                __n = __ses_find_eline_index(f, bp->lid);
 
-                               scf_logw("__n: %ld, l%ld\n", __n, f->elines[__n]->id);
+                               scf_logw("__n: %ld, l%ld\n\n", __n, f->elines[__n]->id);
                                break;
                        }
                }
@@ -597,17 +616,22 @@ static void __ses_layout_path2(ScfEfunction* f, ses_path_t* path, ses_path_t* ba
 
                eline_mov_before(f, __n, n);
 
-               if (SCF_EDA_NPN == p->cid && SCF_EDA_NPN_E == p->id) {
-                       c  = f->components[p->cid];
-                       pc = c->pins[SCF_EDA_NPN_C];
+               c  = f->components[p->cid];
+
+               if (SCF_EDA_NPN == c->type && SCF_EDA_NPN_C == p->id) {
+                       pe = c->pins[SCF_EDA_NPN_E];
                        pb = c->pins[SCF_EDA_NPN_B];
 
-                       intptr_t ic = __ses_find_eline_index(f, pc->lid);
+                       intptr_t ie = __ses_find_eline_index(f, pe->lid);
                        intptr_t ib = __ses_find_eline_index(f, pb->lid);
 
-                       eline_mov_before(f, __n, ib);
+                       eline_mov_after(f, __n, ib);
 
-                       scf_loge("**************** c%ldp%ld, ic: %ld, ib: %ld, ie: %ld\n", p->cid, p->id, ic, ib, n);
+                       ie = __ses_find_eline_index(f, pe->lid);
+                       ib = __ses_find_eline_index(f, pb->lid);
+                       n  = __ses_find_eline_index(f, p->lid);
+
+                       scf_loge("**************** c%ldp%ld, ic: %ld, ib: %ld, ie: %ld\n", p->cid, p->id, n, ib, ie);
                }
        }
        printf("\n");
@@ -617,11 +641,9 @@ static void __ses_layout_path(ScfEfunction* f, ses_path_t* path, ses_path_t* bas
 {
        intptr_t i;
 
-       if (path != base) {
-               __ses_layout_path2(f, path, base);
+       __ses_layout_path2(f, path, base);
 
-               base = path;
-       }
+       base = path;
 
        if (base->childs) {
                for (i = 0; i < base->childs->size; i++) {