Skip to content

Commit

Permalink
add foreign memset/memcpy operations for the primitive package
Browse files Browse the repository at this point in the history
  • Loading branch information
luite committed Aug 31, 2015
1 parent 628d878 commit ce96323
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
47 changes: 47 additions & 0 deletions pkg/primitive.js
@@ -0,0 +1,47 @@
function h$hsprimitive_memcpy(dst_d, dst_o, doff, src_d, src_o, soff, len) {
return h$primitive_memmove(dst_d, dst_o, doff, src_d, src_o, len);
}

function h$hsprimitive_memmove(dst_d, dst_o, doff, src_d, src_o, soff, len) {
if(len === 0) return;
var du8 = dst_d.u8, su8 = src_d.u8;
for(var i=len-1;i>=0;i--) {
du8[dst_o+i] = su8[src_o+i];
}
}

#define MEMSET(TYPE, SIZE, PROP) \
function h$hsprimitive_memset_ ## TYPE (p_d, p_o, off, n, x) { \
var start = (p_o >> SIZE) + off; \
if(n > 0) p_d.PROP.fill(x, start, start + n); \
}

MEMSET(Word8, 0, u8)
MEMSET(Word16, 1, u1)
MEMSET(Word32, 2, i3)
MEMSET(Word, 2, i3)
MEMSET(Float, 2, f3)
MEMSET(Double, 3, f6)
MEMSET(Char, 2, i3)

function h$hsprimitive_memset_Word64(p_d, p_o, off, n, x_1, x_2) {
var start = (p_o >> 3) + off;
if(n > 0) {
var pi3 = p_d.i3;
for(var i = 0; i < n; i++) {
var o = (start + i) << 1;
pi3[o] = x_1;
pi3[o+1] = x_2;
}
}
}

function h$hsprimitive_memset_Ptr(p_d, p_o, off, n, x_1, x_2) {
if(n > 0) {
if(!p_d.arr) p_d.arr = [];
var a = p_d.arr;
for(var i = 0; i < n; i++) {
a[p_o + ((off + i) << 2)] = [x_1, x_2];
}
}
}
2 changes: 2 additions & 0 deletions primitive.yaml
@@ -0,0 +1,2 @@
js:
- pkg/primitive.js

0 comments on commit ce96323

Please sign in to comment.