mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 17:32:36 +00:00
Add comment on how tagged pointers are
distinguished from normal (untagged) ones as per review comment. I am sufficiently unaquainted with doxygen to defer the markup to someone with more experience. llvm-svn: 57676
This commit is contained in:
parent
5fe2abfee8
commit
f1881095be
@ -29,13 +29,20 @@ class User;
|
||||
// Generic Tagging Functions
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// We adhere to the following convention: The type of a tagged pointer
|
||||
// to T is T volatile*. This means that functions that superpose a tag
|
||||
// on a pointer will be supplied a T* (or T const*) and will return a
|
||||
// tagged one: T volatile*. Untagging functions do it the other way
|
||||
// 'round. While this scheme does not prevent dereferencing of tagged
|
||||
// pointers, proper type annotations do catch most inappropriate uses.
|
||||
|
||||
/// Tag - generic tag type for (at least 32 bit) pointers
|
||||
enum Tag { noTag, tagOne, tagTwo, tagThree };
|
||||
|
||||
/// addTag - insert tag bits into an (untagged) pointer
|
||||
template <typename T, typename TAG>
|
||||
inline volatile T *addTag(const T *P, TAG Tag) {
|
||||
return reinterpret_cast<T*>(ptrdiff_t(P) | Tag);
|
||||
return reinterpret_cast<T*>(ptrdiff_t(P) | Tag);
|
||||
}
|
||||
|
||||
/// stripTag - remove tag bits from a pointer,
|
||||
|
Loading…
x
Reference in New Issue
Block a user