On Sat, Feb 11, 2017, at 13:03, Timothy Arceri wrote: > > > On 10/02/17 21:43, Nicolai Hähnle wrote: > > On 07.02.2017 04:42, Timothy Arceri wrote: > >> From: Timothy Arceri <timothy.arc...@collabora.com> > >> > >> This will be used to store all pointers in the cache as 64bit ints > >> allowing us to avoid issues when a 32bit program reads a cached > >> shader that was created by a 64bit application. > >> --- > >> src/compiler/glsl/shader_cache.h | 10 ++++++++++ > >> 1 file changed, 10 insertions(+) > >> > >> diff --git a/src/compiler/glsl/shader_cache.h > >> b/src/compiler/glsl/shader_cache.h > >> index 8bd0a3c..1596c33 100644 > >> --- a/src/compiler/glsl/shader_cache.h > >> +++ b/src/compiler/glsl/shader_cache.h > >> @@ -27,6 +27,16 @@ > >> > >> #include "util/disk_cache.h" > >> > >> +static uint64_t inline > >> +ptr_to_uint64_t(void *ptr) > >> +{ > >> + uint64_t ptr_int = (uint64_t) ptr; > >> +#if __i386__ > >> + ptr_int &= 0xFFFFFFFF; > >> +#endif > > > > Is the bit-wise and here really necessary? > Yes. See [1] for an example and the standard and gcc quotes. > > [1] > http://stackoverflow.com/questions/25039796/cast-from-32-bit-address-to-64-bit-integer-yields-unexpected-results >
Would using (uint64_t)(uintptr_t) not work? You first cast using the ptr size and then cast using an unisgned cast to 64 bits. And that avoids having some conditional there. > > > > Nicolai > > > >> + return ptr_int; > >> +} > >> + > >> void > >> shader_cache_write_program_metadata(struct gl_context *ctx, > >> struct gl_shader_program *prog); > >> > > > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev