YggInline.mesa
Copyright Ó 1985, 1987, 1988 by Xerox Corporation. All rights reserved.
Simple procedures used by several Yggdrasil components.
Last edited by
MBrown on January 30, 1984 11:31:04 am PST
Hauser, March 7, 1985 2:17:46 pm PST
Bob Hagmann March 29, 1989 9:49:08 am PST
DIRECTORY
Basics,
ConstArith,
PBasics,
YggEnvironment;
YggInline: CEDAR DEFINITIONS
IMPORTS
ConstArith, PBasics
= BEGIN
PageNumber: TYPE = YggEnvironment.PageNumber;
WordNumber: TYPE = YggEnvironment.WordNumber;
WordsForBytes: PROC [bytes: INT] RETURNS [words: INT] = CHECKED INLINE {
RETURN[ PBasics.BITRSHIFT[bytes + Basics.bytesPerWord - 1, Basics.logBytesPerWord]];
};
BytesForWords: PROC [words: INT] RETURNS [bytes: INT] = CHECKED INLINE {
RETURN[ PBasics.BITLSHIFT[words, Basics.logBytesPerWord]];
};
LongZero: UNSAFE PROC [where: LONG POINTER, nWords: CARDINAL] = TRUSTED INLINE {
PBasics.Fill[where, nWords, 0] };
ShortWordsFromPages: PROC [pages: CARDINAL, logWordsPerPage: INT] RETURNS [words: CARDINAL] = INLINE {
RETURN [Basics.BITSHIFT[value: pages, count: logWordsPerPage]] };
WordsFromPages: PROC [pages: PageNumber, wordsPerPage: INT] RETURNS [words: WordNumber] = TRUSTED INLINE {
RETURN[ConstArith.Mul[ConstArith.FromInt[pages], ConstArith.FromInt[wordsPerPage]]]};
PagesFromWords: PROC [words: WordNumber, wordsPerPage: INT] RETURNS [pages: PageNumber] = TRUSTED INLINE {
RETURN [ConstArith.ToInt[ConstArith.Div[words, ConstArith.FromCard[wordsPerPage]]]] };
DecomposeWords: PROC [words: WordNumber, wordsPerPage: INT]
RETURNS [page: PageNumber, wordInPage: CARDINAL] = TRUSTED INLINE {
q, r: ConstArith.Const;
[q, r] ← ConstArith.DivMod[words, ConstArith.FromCard[wordsPerPage]];
RETURN [ConstArith.ToInt[q], ConstArith.ToInt[r]]
};
END.