> > Mean that result of "(int64_t)vaddr >> 63" can be 0 or 1. > > So the next code may not work properly in case of another 'implementations'. > > With another compiler (i.e. clang, etc) this code may introduce bugs > > which are hard to find. > > > > ((int64_t)vaddr >> 47) == ((int64_t)vaddr >> 63) > > > > For this reason it is better to avoid implementation-defined code. > > Well, ideally we'd like to get away without using implementation > defined behavior. But I'm afraid we're quite far from that, and > we'd not always be willing to accept the worse source and/or > binary code that would be needed to avoid it.
How about using the next one-liner to avoid implementation-defined code : //Returns true in case when the top left 17 bits are all zero or are all one return ((!(vaddr >> 47)) || (((vaddr >> 47)&0x1FFFF) == 0x1FFFF)) Agree? Thanks _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel