Skip to content

Instantly share code, notes, and snippets.

@kripken
Created March 27, 2019 17:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kripken/a9d90e7cfaed9d210aff4fd0be98217d to your computer and use it in GitHub Desktop.
Save kripken/a9d90e7cfaed9d210aff4fd0be98217d to your computer and use it in GitHub Desktop.
#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';
}
// 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