@@ -535,17 +535,17 @@ func span7(ctxt *obj.Link, cursym *obj.LSym) {
535
535
buildop (ctxt )
536
536
}
537
537
538
- bflag := 0
539
- c := int32 (0 )
540
- p .Pc = int64 ( c )
538
+ bflag := 1
539
+ c := int64 (0 )
540
+ p .Pc = c
541
541
var m int
542
542
var o * Optab
543
543
for p = p .Link ; p != nil ; p = p .Link {
544
544
ctxt .Curp = p
545
545
if p .As == ADWORD && (c & 7 ) != 0 {
546
546
c += 4
547
547
}
548
- p .Pc = int64 ( c )
548
+ p .Pc = c
549
549
o = oplook (ctxt , p )
550
550
m = int (o .size )
551
551
if m == 0 {
@@ -567,13 +567,13 @@ func span7(ctxt *obj.Link, cursym *obj.LSym) {
567
567
if p .As == AB || p .As == obj .ARET || p .As == AERET { /* TODO: other unconditional operations */
568
568
checkpool (ctxt , p , 0 )
569
569
}
570
- c += int32 (m )
570
+ c += int64 (m )
571
571
if ctxt .Blitrl != nil {
572
572
checkpool (ctxt , p , 1 )
573
573
}
574
574
}
575
575
576
- cursym .Size = int64 ( c )
576
+ cursym .Size = c
577
577
578
578
/*
579
579
* if any procedure is large enough to
@@ -582,38 +582,38 @@ func span7(ctxt *obj.Link, cursym *obj.LSym) {
582
582
* around jmps to fix. this is rare.
583
583
*/
584
584
for bflag != 0 {
585
+ if ctxt .Debugvlog != 0 {
586
+ fmt .Fprintf (ctxt .Bso , "%5.2f span1\n " , obj .Cputime ())
587
+ }
585
588
bflag = 0
586
589
c = 0
587
- for p = cursym .Text ; p != nil ; p = p .Link {
590
+ for p = cursym .Text . Link ; p != nil ; p = p .Link {
588
591
if p .As == ADWORD && (c & 7 ) != 0 {
589
592
c += 4
590
593
}
591
- p .Pc = int64 ( c )
594
+ p .Pc = c
592
595
o = oplook (ctxt , p )
593
596
594
- /* very large branches
595
- if(o->type == 6 && p->cond) {
596
- otxt = p->cond->pc - c;
597
- if(otxt < 0)
598
- otxt = -otxt;
599
- if(otxt >= (1L<<17) - 10) {
600
- q = ctxt->arch->prg();
601
- q->link = p->link;
602
- p->link = q;
603
- q->as = AB;
604
- q->to.type = obj.TYPE_BRANCH;
605
- q->cond = p->cond;
606
- p->cond = q;
607
- q = ctxt->arch->prg();
608
- q->link = p->link;
609
- p->link = q;
610
- q->as = AB;
611
- q->to.type = obj.TYPE_BRANCH;
612
- q->cond = q->link->link;
613
- bflag = 1;
597
+ /* very large branches */
598
+ if o .type_ == 7 && p .Pcond != nil {
599
+ otxt := p .Pcond .Pc - c
600
+ if otxt <= - (1 << 18 )+ 10 || otxt >= (1 << 18 )- 10 {
601
+ q := ctxt .NewProg ()
602
+ q .Link = p .Link
603
+ p .Link = q
604
+ q .As = AB
605
+ q .To .Type = obj .TYPE_BRANCH
606
+ q .Pcond = p .Pcond
607
+ p .Pcond = q
608
+ q = ctxt .NewProg ()
609
+ q .Link = p .Link
610
+ p .Link = q
611
+ q .As = AB
612
+ q .To .Type = obj .TYPE_BRANCH
613
+ q .Pcond = q .Link .Link
614
+ bflag = 1
614
615
}
615
616
}
616
- */
617
617
m = int (o .size )
618
618
619
619
if m == 0 {
@@ -623,12 +623,12 @@ func span7(ctxt *obj.Link, cursym *obj.LSym) {
623
623
continue
624
624
}
625
625
626
- c += int32 (m )
626
+ c += int64 (m )
627
627
}
628
628
}
629
629
630
630
c += - c & (FuncAlign - 1 )
631
- cursym .Size = int64 ( c )
631
+ cursym .Size = c
632
632
633
633
/*
634
634
* lay out the code, emitting code and data relocations.
0 commit comments