It does divide it by 4, which is necessary because of how typed arrays
work. If HEAP32 aliases HEAP8, then HEAP32[0] refers to bytes 0,1,2,3 as a
single 32-bit integer, and HEAP32[1] refers to bytes 4,5,6,7, and so forth.
That means that if you are given a pointer to a 32-bit integer at memory
address 4, you need to access it using HEAP32[1] === HEAP32[4>>2].

- Alon



On Sun, Aug 17, 2014 at 9:17 AM, awt <[email protected]> wrote:

> Hi,
>
> I read in the asm.js specs that:
>
> As an example of the former, if we have an Int32Array
> <https://developer.mozilla.org/en-US/docs/JavaScript/Typed_arrays/Int32Array>
>  view of the heap called HEAP32, then we can load the 32-bit integer at
> byte offset p:
>
> HEAP32[p >> 2]|0
>
> The shift converts the byte offset to a 32-bit element offset, and the
> bitwise coercion ensures that an out-of-bounds access is coerced from
> undefined back to an integer.
>
> I understand that performing a bitwise operation will perform an integer
> coercion but why do we shift it 2 bits for a 32bit integer? Similarly, I
> notice that we shift it by 1 bit for a 16 bit short in cpp. Doesn't a shift
> of 2 bits divide the value of p by 4?
>
> --
> You received this message because you are subscribed to the Google Groups
> "emscripten-discuss" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to