Created
March 27, 2019 17:00
-
-
Save kripken/a9d90e7cfaed9d210aff4fd0be98217d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <string> | |
#include <emscripten.h> | |
int main() { | |
size_t total = 0; | |
for (int i = 0; i < 1000000; i++) { | |
for (std::string str : { "hello", "world", "!", "test", "ing", "strings", "many", "of", "them" }) { | |
total += EM_ASM_INT({ | |
return AsciiToString($0).length; | |
}, str.c_str()); | |
} | |
} | |
std::cout << total << '\n'; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Support for growable heap + pthreads, where the buffer may change, so JS views | |
// must be updated. | |
function GROWABLE_HEAP_STORE_I8(ptr, value) { | |
if (wasmMemory.buffer != buffer) { | |
buffer = wasmMemory.buffer; | |
updateGlobalBufferViews(); | |
} | |
HEAP8[ptr] = value; | |
} | |
function GROWABLE_HEAP_STORE_I16(ptr, value) { | |
if (wasmMemory.buffer != buffer) { | |
buffer = wasmMemory.buffer; | |
updateGlobalBufferViews(); | |
} | |
HEAP16[ptr >> 1] = value; | |
} | |
function GROWABLE_HEAP_STORE_I32(ptr, value) { | |
if (wasmMemory.buffer != buffer) { | |
buffer = wasmMemory.buffer; | |
updateGlobalBufferViews(); | |
} | |
HEAP32[ptr >> 2] = value; | |
} | |
function GROWABLE_HEAP_STORE_F32(ptr, value) { | |
if (wasmMemory.buffer != buffer) { | |
buffer = wasmMemory.buffer; | |
updateGlobalBufferViews(); | |
} | |
HEAPF32[ptr >> 2] = value; | |
} | |
function GROWABLE_HEAP_STORE_F64(ptr, value) { | |
if (wasmMemory.buffer != buffer) { | |
buffer = wasmMemory.buffer; | |
updateGlobalBufferViews(); | |
} | |
HEAPF64[ptr >> 3] = value; | |
} | |
function GROWABLE_HEAP_LOAD_I8(ptr) { | |
if (wasmMemory.buffer != buffer) { | |
buffer = wasmMemory.buffer; | |
updateGlobalBufferViews(); | |
} | |
return HEAP8[ptr]; | |
} | |
function GROWABLE_HEAP_LOAD_U8(ptr) { | |
if (wasmMemory.buffer != buffer) { | |
buffer = wasmMemory.buffer; | |
updateGlobalBufferViews(); | |
} | |
return HEAPU8[ptr]; | |
} | |
function GROWABLE_HEAP_LOAD_I16(ptr) { | |
if (wasmMemory.buffer != buffer) { | |
buffer = wasmMemory.buffer; | |
updateGlobalBufferViews(); | |
} | |
return HEAP16[ptr >> 1]; | |
} | |
function GROWABLE_HEAP_LOAD_U16(ptr) { | |
if (wasmMemory.buffer != buffer) { | |
buffer = wasmMemory.buffer; | |
updateGlobalBufferViews(); | |
} | |
return HEAPU16[ptr >> 1]; | |
} | |
function GROWABLE_HEAP_LOAD_I32(ptr) { | |
if (wasmMemory.buffer != buffer) { | |
buffer = wasmMemory.buffer; | |
updateGlobalBufferViews(); | |
} | |
return HEAP32[ptr >> 2]; | |
} | |
function GROWABLE_HEAP_LOAD_U32(ptr) { | |
if (wasmMemory.buffer != buffer) { | |
buffer = wasmMemory.buffer; | |
updateGlobalBufferViews(); | |
} | |
return HEAPU32[ptr >> 2]; | |
} | |
function GROWABLE_HEAP_LOAD_F32(ptr) { | |
if (wasmMemory.buffer != buffer) { | |
buffer = wasmMemory.buffer; | |
updateGlobalBufferViews(); | |
} | |
return HEAPF32[ptr >> 2]; | |
} | |
function GROWABLE_HEAP_LOAD_F64(ptr) { | |
if (wasmMemory.buffer != buffer) { | |
buffer = wasmMemory.buffer; | |
updateGlobalBufferViews(); | |
} | |
return HEAPF64[ptr >> 3]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment