|
Every pointer type needs to have all tag bits set to be a valid pointer. The last field in LQ instruction is a mask which is compared to pointer flag bits and is used to set a bit in a condition register to efficiently test for a pointer type. LQ instruction can be immediately followed by branch on condition register - no separate test instruction is needed. My guess (I may be wrong) - 15 is a test for null pointer. Alexei Pytel Leif Svalgaard <l.svalgaard@pentasafe.com> on 12/10/99 11:19:03 AM Please respond to MI400@midrange.com To: MI400@midrange.com cc: Subject: RE: LQ instruction question > I think the four bits in that nibble denote an ORed mask of pointer types. > > B'1000' = system pointer > B'0100' = instruction pointer > B'0010' = space pointer > B'0001' = data pointer > > I think LQ throws an exception if the source pointer is not one of the > types in the nibble. > [Leif Svalgaard] I have been thinking a bit (pun intended) more about this. Frank Soltis's book says: A pointer in the original S/38 occupied four consecutive 4-byte words in memory, each with its own tag bit. We decided to have the tag bit for every memory word set to 1 if that word contained any of the four parts of a pointer. If there was no part of a pointer in the word, the tag bit was set to 0. The pointer itself needed only one tag, so we said if all 4 bits in the consecutive four memory words were set to 1, then the pointer had a logical tag of 1. If any of the 4 bits was 0, then the pointer had a logical tag of 0. Later implementations of the AS/400 have a 64-bit (8-byte) memory word. A 64-bit memory word requires 8 ECC (Error Correction Code) bits; so with the tag bit, the AS/400 memories are packaged 73 bits wide. We still keep pointers on 16-byte boundaries and each pointer has one logical tag bit. For the AS/400 with the 64-bit memory word, the TWO tag bits in the consecutive two words that hold the pointer must both be 1 for the pointer to have a logical tag of 1. If either tag bit is 0, then the pointer has a logical tag of 0. With all this in mind, how can the LQ instruction know what type of pointer it is trying to load? there are only two physical tag bits available and they must both be set to have a valid logical tag. Maybe Frank is not telling the whole truth or maybe the 4-bit field is part of a design that was never actually implemented? I've tried various combinations of the 4 bits, and it doesn't seem to matter. ?????? +--- | This is the MI Programmers Mailing List! | To submit a new message, send your mail to MI400@midrange.com. | To subscribe to this list send email to MI400-SUB@midrange.com. | To unsubscribe from this list send email to MI400-UNSUB@midrange.com. | Questions should be directed to the list owner/operator: dr2@cssas400.com +--- +--- | This is the MI Programmers Mailing List! | To submit a new message, send your mail to MI400@midrange.com. | To subscribe to this list send email to MI400-SUB@midrange.com. | To unsubscribe from this list send email to MI400-UNSUB@midrange.com. | Questions should be directed to the list owner/operator: dr2@cssas400.com +---
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.