aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-10-17 17:26:41 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-10-18 13:00:49 -0700
commit5708083df9706cc22c8570d4c933a170f5936c4a (patch)
tree904eb2277d693b0ded54cdb74dde3dbae23e90fd /src
parentf439b01a91e285e7b5699b67c4031b776245e4f9 (diff)
vector load
Diffstat (limited to 'src')
-rw-r--r--src/jsifier.js8
-rw-r--r--src/parseTools.js4
2 files changed, 12 insertions, 0 deletions
diff --git a/src/jsifier.js b/src/jsifier.js
index 0b46a3e6..cb80e303 100644
--- a/src/jsifier.js
+++ b/src/jsifier.js
@@ -1303,6 +1303,14 @@ function JSify(data, functionsOnly, givenFunctions) {
}
function loadHandler(item) {
var value = finalizeLLVMParameter(item.pointer);
+ if (item.valueType[item.valueType.length-1] === '>') {
+ // vector load
+ var base = getVectorBaseType(item.type);
+ return base + '32x4(' + makeGetValue(value, 0, base, 0, item.unsigned, 0, item.align) + ',' +
+ makeGetValue(value, 4, base, 0, item.unsigned, 0, item.align) + ',' +
+ makeGetValue(value, 8, base, 0, item.unsigned, 0, item.align) + ',' +
+ makeGetValue(value, 12, base, 0, item.unsigned, 0, item.align) + ')';
+ }
var impl = item.ident ? getVarImpl(item.funcData, item.ident) : VAR_EMULATED;
switch (impl) {
case VAR_NATIVIZED: {
diff --git a/src/parseTools.js b/src/parseTools.js
index eb2b2210..9b497aff 100644
--- a/src/parseTools.js
+++ b/src/parseTools.js
@@ -324,6 +324,10 @@ function countNormalArgs(type, out, legalized) {
return ret;
}
+function getVectorBaseType(type) {
+ return type.substring(type.indexOf(' x ') + 3, type.length-1);
+}
+
function addIdent(token) {
token.ident = token.text;
return token;