On 27 February 2015 at 19:40, Jonathan S. Shapiro <[email protected]> wrote:
> On Fri, Feb 27, 2015 at 11:22 AM, Keean Schupke <[email protected]> wrote: > >> On 27 February 2015 at 19:17, Jonathan S. Shapiro <[email protected]> >> wrote: >> >>> >>> From a type system perspective I agree that you can supply as many >>> arguments as the function type supports. The problem is that you can't pass >>> two arguments in the same register. >>> >> >> Registerisation is an optimisation, at the language level we should >> assume there are infinite slots for arguments, which get passed on the >> stack. Putting arguments into registers should be an optimisation pass. >> This is what 'C' does and its plenty fast enough... >> > > In very significant measure, the progress we have made from work on > functional languages has been possible *because* simplifying and > regularizing assumptions like this one were made, and implementation > realities were set aside. That, by the way, was a conscious decision at > Cambridge, and probably a good one. > > But BitC isn't an academic language. In practical languages we eventually > need to deal with annoying and ugly inconveniences. Things like: > > - The calling convention sometimes isn't something we get to negotiate > - The fact that natural alignments in memory matter > - The stack is so much slower than registers that the difference *is* > semantic > - We don't get to make the assumption that we can rewrite things > arbitrarily > > As an abstract model from which to proceed with optimization, I agree with > what you say. Conceptually we can stack the extra arguments and move them > back into registers later. It brings on some tricky alias analysis in the > presence of by-reference arguments, but it can be done. It may even be a > good approach to consider from an optimization perspective. > > > shap > And new processors like The Mill's belt architecture rely on it. It effectively has an infinite supply of new registers, and every register store gets a new register, but you cannot access results older than slot 'N' where 'N' is a model dependent number something like 1000+ Keean.
_______________________________________________ bitc-dev mailing list [email protected] http://www.coyotos.org/mailman/listinfo/bitc-dev
