diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-02-07 19:09:36 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-02-07 19:09:36 -0800 |
commit | cd7d64a1945a7309804008feead7ebe4acb5a722 (patch) | |
tree | 831a8c939c33cc8205aa284b363498f2fc68e031 /src | |
parent | c3e992c15d5aa3ff6e36f51818845fadb32fa60c (diff) |
fix for unaligned stores of non-nativized doubles
Diffstat (limited to 'src')
-rw-r--r-- | src/parseTools.js | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/parseTools.js b/src/parseTools.js index a5752e67..f2f72fa3 100644 --- a/src/parseTools.js +++ b/src/parseTools.js @@ -962,8 +962,8 @@ function makeSetValue(ptr, pos, value, type, noNeedFirst, ignore, align, noSafe, if (DOUBLE_MODE == 1 && USE_TYPED_ARRAYS == 2 && type == 'double') { return '(tempDoubleF64[0]=' + value + ',' + - makeSetValue(ptr, pos, 'tempDoubleI32[0]', 'i32', noNeedFirst, ignore, align) + ',' + - makeSetValue(ptr, getFastValue(pos, '+', Runtime.getNativeTypeSize('i32')), 'tempDoubleI32[1]', 'i32', noNeedFirst, ignore, align) + ')'; + makeSetValue(ptr, pos, 'tempDoubleI32[0]', 'i32', noNeedFirst, ignore, align, noSafe, ',') + ',' + + makeSetValue(ptr, getFastValue(pos, '+', Runtime.getNativeTypeSize('i32')), 'tempDoubleI32[1]', 'i32', noNeedFirst, ignore, align, noSafe, ',') + ')'; } if (USE_TYPED_ARRAYS == 2 && align) { @@ -976,18 +976,18 @@ function makeSetValue(ptr, pos, value, type, noNeedFirst, ignore, align, noSafe, // Special case that we can optimize ret += 'tempBigInt=' + value + sep; ret += makeSetValue(ptr, pos, 'tempBigInt&0xffff', 'i16', noNeedFirst, ignore, 2) + sep; - ret += makeSetValue(ptr, getFastValue(pos, '+', 2), 'tempBigInt>>16', 'i16', noNeedFirst, ignore, 2) + sep; + ret += makeSetValue(ptr, getFastValue(pos, '+', 2), 'tempBigInt>>16', 'i16', noNeedFirst, ignore, 2); } else if (bytes <= 4) { ret += 'tempBigInt=' + value + sep; for (var i = 0; i < bytes; i++) { - ret += makeSetValue(ptr, getFastValue(pos, '+', i), 'tempBigInt&0xff', 'i8', noNeedFirst, ignore, 1) + sep; - if (i < bytes-1) ret += 'tempBigInt>>=8' + sep; + ret += makeSetValue(ptr, getFastValue(pos, '+', i), 'tempBigInt&0xff', 'i8', noNeedFirst, ignore, 1); + if (i < bytes-1) ret += sep + 'tempBigInt>>=8' + sep; } } else { assert(bytes == 8); ret += 'tempPair=' + ensureI64_1(value) + sep; ret += makeSetValue(ptr, pos, 'tempPair[0]', 'i32', noNeedFirst, ignore, align) + sep; - ret += makeSetValue(ptr, getFastValue(pos, '+', Runtime.getNativeTypeSize('i32')), 'tempPair[1]', 'i32', noNeedFirst, ignore, align) + sep; + ret += makeSetValue(ptr, getFastValue(pos, '+', Runtime.getNativeTypeSize('i32')), 'tempPair[1]', 'i32', noNeedFirst, ignore, align); } } else { ret += makeSetValue('tempDoublePtr', 0, value, type, noNeedFirst, ignore, 8) + sep; |