typed arrays: implement load and store swizzling
authorDean McNamee <dean@gmail.com>
Sun, 6 Jan 2013 17:59:12 +0000 (18:59 +0100)
committerBen Noordhuis <info@bnoordhuis.nl>
Wed, 9 Jan 2013 16:44:25 +0000 (17:44 +0100)
commitc207d400f118032a419f978e766acd99af980132
tree675f2d0d739a52a453abc9e9b87830afc4e0cf52
parent46a489be73fd87fa3e17dd929c53d9e90860f80a
typed arrays: implement load and store swizzling

Implement load and store swizzling operations. This reduces an unneeded
back and forth between types and additionally keeps the value in the
swappable type until it is swapped. This is important for correctness
when dealing with floating point, to avoid the possibility of loading
the bits of a signaling NaN (because it isn't yet swapped) into the FPU.

This additionally produces better code (comments are mine):

gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)

setValue<double>:
  movd  %xmm0, %rax         ; fp reg -> gen reg
  bswapq  %rax              ; 64-bit byte swap
  movq  %rax, (%r15,%r12)   ; store
src/v8_typed_array.cc
src/v8_typed_array_bswap.h