Mercurial > repos > tabletprog
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 } |