aboutsummaryrefslogtreecommitdiff
path: root/src/preamble.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-01-23 17:32:52 -0800
committerAlon Zakai <alonzakai@gmail.com>2012-01-23 17:32:52 -0800
commit76a81417feb8297e33ebca5982b90ac9ab3032f0 (patch)
tree92bbfb56f842dd29f0c00613c9568aca667e8c7e /src/preamble.js
parent4f33436231371f7fe5402c0c0a22076820aa76b8 (diff)
unaligned loads and stores for floats and doubles
Diffstat (limited to 'src/preamble.js')
-rw-r--r--src/preamble.js18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/preamble.js b/src/preamble.js
index d86cd745..24359b18 100644
--- a/src/preamble.js
+++ b/src/preamble.js
@@ -644,6 +644,24 @@ STACK_MAX = STACK_ROOT + TOTAL_STACK;
var tempDoublePtr = Runtime.alignMemory(STACK_MAX, 8);
var tempDoubleI32 = HEAP32.subarray(tempDoublePtr >> 2);
var tempDoubleF64 = new Float64Array(tempDoubleI32.buffer);
+var tempDoubleF32 = new Float32Array(tempDoubleI32.buffer);
+var tempDoubleI8 = new Int8Array(tempDoubleI32.buffer);
+function copyTempFloat(ptr) { // functions, because inlining this code is increases code size too much
+ tempDoubleI8[0] = HEAP8[ptr];
+ tempDoubleI8[1] = HEAP8[ptr+1];
+ tempDoubleI8[2] = HEAP8[ptr+2];
+ tempDoubleI8[3] = HEAP8[ptr+3];
+}
+function copyTempDouble(ptr) {
+ tempDoubleI8[0] = HEAP8[ptr];
+ tempDoubleI8[1] = HEAP8[ptr+1];
+ tempDoubleI8[2] = HEAP8[ptr+2];
+ tempDoubleI8[3] = HEAP8[ptr+3];
+ tempDoubleI8[4] = HEAP8[ptr+4];
+ tempDoubleI8[5] = HEAP8[ptr+5];
+ tempDoubleI8[6] = HEAP8[ptr+6];
+ tempDoubleI8[7] = HEAP8[ptr+7];
+}
STACK_MAX = tempDoublePtr + 8;
#endif
#endif