comparison modules/x86.tp @ 195:7856f0916549

Add save il instruction to save callee saved registers in function prolog
author Mike Pavone <pavone@retrodev.com>
date Mon, 26 Aug 2013 21:04:44 -0700
parents 30bed95cbb18
children 3606a7cb3999
comparison
equal deleted inserted replaced
194:30bed95cbb18 195:7856f0916549
516 while: { found < 0 && curlist < ll } do: { 516 while: { found < 0 && curlist < ll } do: {
517 cur <- 0 517 cur <- 0
518 regs <- reglists get: curlist 518 regs <- reglists get: curlist
519 len <- regs length 519 len <- regs length
520 while: { found < 0 && cur < len } do: { 520 while: { found < 0 && cur < len } do: {
521 bit <- lshift: 1 by: cur 521 bit <- lshift: 1 by: ((regs get: cur) num)
522 if: (_used and bit) = 0 { 522 if: (_used and bit) = 0 {
523 found <- cur 523 found <- cur
524 foundlist <- regs 524 foundlist <- regs
525 _used <- _used or bit 525 _used <- _used or bit
526 _usedAllTime <- _usedAllTime or bit 526 _usedAllTime <- _usedAllTime or bit
584 } 584 }
585 returnAll <- { _used = 0 } 585 returnAll <- { _used = 0 }
586 needSaveProlog <- { 586 needSaveProlog <- {
587 retval <- #[] 587 retval <- #[]
588 foreach: _calleesave :idx reg { 588 foreach: _calleesave :idx reg {
589 if: (_usedAllTime and (lshift: 1 by: (reg num))) != 0 { 589 bit <- lshift: 1 by: (reg num)
590 if: (_usedAllTime and bit) != 0 {
590 retval append: reg 591 retval append: reg
591 } 592 }
592 } 593 }
593 retval 594 retval
594 } 595 }