aboutsummaryrefslogtreecommitdiff
path: root/src/analyzer.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/analyzer.js')
-rw-r--r--src/analyzer.js19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/analyzer.js b/src/analyzer.js
index cbede04e..bfb2dd7b 100644
--- a/src/analyzer.js
+++ b/src/analyzer.js
@@ -121,7 +121,7 @@ function analyzer(data, sidePass) {
// Legalization
if (USE_TYPED_ARRAYS == 2) {
function getLegalVars(base, bits) {
- assert(!isNumber(base));
+ if (isNumber(base)) return getLegalLiterals(base, bits);
var ret = new Array(Math.ceil(bits/32));
var i = 0;
while (bits > 0) {
@@ -463,6 +463,23 @@ function analyzer(data, sidePass) {
i++;
continue;
}
+ case 'insertvalue': {
+ bits = getBits(value.type);
+ var toAdd = [];
+ var elements = getLegalVars(item.assignTo, bits);
+ var sourceElements = getLegalVars(item.ident, bits);
+ var modifiedIndex = value.indexes[0][0].text;
+ for (var j = 0; j < elements.length; j++) {
+ toAdd.push({
+ intertype: 'value',
+ assignTo: elements[j].ident,
+ type: 'i' + elements[j].bits,
+ ident: j == modifiedIndex ? item.value.ident : sourceElements[j].ident
+ });
+ }
+ i += removeAndAdd(label.lines, i, toAdd);
+ continue;
+ }
case 'bitcast': {
var inType = item.type2;
var outType = item.type;