diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-01-16 12:22:34 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-01-16 12:22:34 -0800 |
commit | abcc12003c814608f305b09044218996e1214ab1 (patch) | |
tree | 079837f7ef90168e1c72f39215213821d261bee4 /src/library.js | |
parent | d53e12ae8e561ee1aecf76c48e2f4eff260af0d3 (diff) |
allow defining asm library functions, which are then included as if they were generated code
Diffstat (limited to 'src/library.js')
-rw-r--r-- | src/library.js | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/library.js b/src/library.js index b70aadbc..d6508fbe 100644 --- a/src/library.js +++ b/src/library.js @@ -2607,6 +2607,7 @@ LibraryManager.library = { // format: A pointer to the format string. // varargs: A pointer to the start of the arguments list. // Returns the resulting string string as a character array. + _formatString__deps: ['strlen'], _formatString: function(format, varargs) { var textIndex = format; var argIndex = 0; @@ -2933,7 +2934,7 @@ LibraryManager.library = { } else if (next == 's'.charCodeAt(0)) { // String. var arg = getNextArg('i8*') || nullString; - var argLength = String_len(arg); + var argLength = _strlen(arg); if (precisionSet) argLength = Math.min(argLength, precision); if (!flagLeftAlign) { while (argLength < width--) { @@ -4268,8 +4269,15 @@ LibraryManager.library = { llvm_memset_p0i8_i32: 'memset', llvm_memset_p0i8_i64: 'memset', + strlen__asm: 'ii', strlen: function(ptr) { - return String_len(ptr); + ptr = ptr|0; + var curr = 0; + curr = ptr; + while ({{{ makeGetValueAsm('curr', '0', 'i8') }}}|0 != 0) { + curr = (curr + 1)|0; + } + return (curr - ptr)|0; }, // TODO: Implement when we have real unicode support. @@ -4493,17 +4501,18 @@ LibraryManager.library = { }, rindex: 'strrchr', + strdup__deps: ['strlen'], strdup: function(ptr) { - var len = String_len(ptr); + var len = _strlen(ptr); var newStr = _malloc(len + 1); {{{ makeCopyValues('newStr', 'ptr', 'len', 'null', null, 1) }}}; {{{ makeSetValue('newStr', 'len', '0', 'i8') }}}; return newStr; }, - strndup__deps: ['strdup'], + strndup__deps: ['strdup', 'strlen'], strndup: function(ptr, size) { - var len = String_len(ptr); + var len = _strlen(ptr); if (size >= len) { return _strdup(ptr); |