aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/modules.js2
-rw-r--r--src/parseTools.js6
2 files changed, 6 insertions, 2 deletions
diff --git a/src/modules.js b/src/modules.js
index e2509965..f613c20b 100644
--- a/src/modules.js
+++ b/src/modules.js
@@ -8,7 +8,7 @@ var LLVM = {
'weak_odr', 'externally_visible', 'dllimport', 'dllexport', 'unnamed_addr'),
VISIBILITIES: set('default', 'hidden', 'protected'),
PARAM_ATTR: set('noalias', 'signext', 'zeroext', 'inreg', 'sret', 'nocapture', 'nest'),
- CALLING_CONVENTIONS: set('ccc', 'fastcc', 'coldcc', 'cc10')
+ CALLING_CONVENTIONS: set('ccc', 'fastcc', 'coldcc', 'cc10', 'x86_fastcallcc')
};
LLVM.GLOBAL_MODIFIERS = set(keys(LLVM.LINKAGES).concat(['constant', 'global', 'hidden']));
diff --git a/src/parseTools.js b/src/parseTools.js
index 6eb95593..94989f9d 100644
--- a/src/parseTools.js
+++ b/src/parseTools.js
@@ -309,6 +309,8 @@ function parseParamTokens(params) {
}
} else if (segment[1].text in PARSABLE_LLVM_FUNCTIONS) {
ret.push(parseLLVMFunctionCall(segment));
+ } else if (segment[1].text === 'blockaddress') {
+ ret.push(parseBlockAddress(segment));
} else {
if (segment[2] && segment[2].text == 'to') { // part of bitcast params
segment = segment.slice(0, 2);
@@ -334,6 +336,8 @@ function parseParamTokens(params) {
function finalizeParam(param) {
if (param.intertype in PARSABLE_LLVM_FUNCTIONS) {
return finalizeLLVMFunctionCall(param);
+ } else if (param.intertype === 'blockaddress') {
+ return finalizeBlockAddress(param);
} else if (param.intertype === 'jsvalue') {
return param.ident;
} else {
@@ -426,7 +430,7 @@ function parseLLVMFunctionCall(segment) {
params: parseParamTokens(segment[2].item.tokens)
};
Types.needAnalysis[ret.type] = 0;
- ret.ident = toNiceIdent(ret.params[0].ident);
+ ret.ident = toNiceIdent(ret.params[0].ident || 'NOIDENT');
return ret;
}