aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-03-03 10:15:24 -0800
committerAlon Zakai <alonzakai@gmail.com>2013-03-03 10:24:23 -0800
commit01371349a2f9dffb41003ec68ac43220381bba9b (patch)
treec53e73f2b6cdb65ae56877f8485c903cbd275ae9 /src
parent485cee0a7ae5a251f8a83bbb3e3b02802a1b4591 (diff)
optimize allocate()ion of zeroinit
Diffstat (limited to 'src')
-rw-r--r--src/preamble.js21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/preamble.js b/src/preamble.js
index 8bde7284..9bc68d8f 100644
--- a/src/preamble.js
+++ b/src/preamble.js
@@ -412,14 +412,6 @@ Module['ALLOC_STACK'] = ALLOC_STACK;
Module['ALLOC_STATIC'] = ALLOC_STATIC;
Module['ALLOC_NONE'] = ALLOC_NONE;
-// Simple unoptimized memset - necessary during startup
-var _memset = function(ptr, value, num) {
- var stop = ptr + num;
- while (ptr < stop) {
- {{{ makeSetValue('ptr++', 0, 'value', 'i8', null, true) }}};
- }
-}
-
// allocate(): This is for internal use. You can use it yourself as well, but the interface
// is a little tricky (see docs right below). The reason is that it is optimized
// for multiple syntaxes to save space in generated code. So you should
@@ -453,7 +445,18 @@ function allocate(slab, types, allocator, ptr) {
}
if (zeroinit) {
- _memset(ret, 0, size);
+ var ptr = ret, stop;
+#if USE_TYPED_ARRAYS == 2
+ assert((ret & 3) == 0);
+ stop = ret + (size & ~3);
+ for (; ptr < stop; ptr += 4) {
+ {{{ makeSetValue('ptr', '0', '0', 'i32', null, true) }}};
+ }
+#endif
+ stop = ret + size;
+ while (ptr < stop) {
+ {{{ makeSetValue('ptr++', '0', '0', 'i8', null, true) }}};
+ }
return ret;
}