Program routines normally requiring windowed register allocation using
conventional assembly code generation in a compiler are examined for
eligibility for a wrapper routine optimization procedure in which wrapper
routine assembly code instructions are generated in response to the
application of high level programming language instructions specifying
routines. If not eligible, the compiler generates assembly code
instructions in a conventional way, allocating windowed registers to each
routine. If the routine is eligible for wrapper routine optimization, the
routine is further examined to determine whether the routine includes tail
routine calls only or calls within the body of the routine. If the former,
the routine is examined to determine whether local stack usage is
required. For a routine having tail routine calls only and a requirement
of local stack usage, wrapper routine assembly code instructions of a
first type are generated. If the routine includes tail calls only and no
requirement for local storage, wrapper routine assembly code instructions
of a second type are generated. If the routine incorporates one or more
calls within the body thereof, the routine is further examined to
determine whether a live register is required over any of the calls. If
so, wrapper routine assembly code instructions of a third type are
generated. If the routine incorporates calls within the body thereof and a
live register is not required over any call, wrapper routine assembly code
instructions of a fourth type are generated.
Οι ρουτίνες προγράμματος που απαιτούν κανονικά η κατανομή καταλόγων χρησιμοποιώντας τη συμβατική παραγωγή κώδικα συνελεύσεων σε έναν μεταγλωττιστή εξετάζονται για την επιλεξιμότητα για μια στερεότυπη διαδικασία βελτιστοποίησης περιτυλιγμάτων στην οποία οι στερεότυπες οδηγίες κώδικα συνελεύσεων περιτυλιγμάτων παράγονται σε απάντηση στην εφαρμογή των γλωσσικών οδηγιών προγραμματισμού υψηλού επιπέδου που διευκρινίζουν τις ρουτίνες. Εάν μη επιλέξιμος, ο μεταγλωττιστής παράγει τις οδηγίες κώδικα συνελεύσεων με έναν συμβατικό τρόπο, η διάθεση οι κατάλογοι σε κάθε ρουτίνα. Εάν η ρουτίνα είναι επιλέξιμη για τη στερεότυπη βελτιστοποίηση περιτυλιγμάτων, η ρουτίνα εξετάζεται περαιτέρω για να καθορίσει εάν η ρουτίνα περιλαμβάνει τις στερεότυπες κλήσεις ουρών μόνο ή τις κλήσεις μέσα στο σώμα της ρουτίνας. Εάν το πρώτο, η ρουτίνα εξετάζεται για να καθορίσει εάν η τοπική χρήση σωρών απαιτείται. Για έναν στερεότυπο έχοντας τις στερεότυπες κλήσεις ουρών μόνο και μια απαίτηση της τοπικής χρήσης σωρών, οι στερεότυπες οδηγίες κώδικα συνελεύσεων περιτυλιγμάτων ενός πρώτου τύπου παράγονται. Εάν η ρουτίνα δεν περιλαμβάνει την κλήση ουρών μόνο και καμία απαίτηση για την τοπική αποθήκευση, οι στερεότυπες οδηγίες κώδικα συνελεύσεων περιτυλιγμάτων ενός δεύτερου τύπου παράγονται. Εάν η ρουτίνα ενσωματώνει μια ή περισσότερες κλήσεις μέσα στο σώμα επ' αυτού, η ρουτίνα εξετάζεται περαιτέρω για να καθορίσει εάν ένας ζωντανός κατάλογος απαιτείται πέρα από οποιεσδήποτε από τις κλήσεις. Σε αυτή την περίπτωση, οι στερεότυπες οδηγίες κώδικα συνελεύσεων περιτυλιγμάτων ενός τρίτου τύπου παράγονται. Εάν η ρουτίνα ενσωματώνει τις κλήσεις μέσα στο σώμα επ' αυτού και ένας ζωντανός κατάλογος δεν απαιτείται πέρα από οποιαδήποτε κλήση, οι στερεότυπες οδηγίες κώδικα συνελεύσεων περιτυλιγμάτων ενός τέταρτου τύπου παράγονται.