aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoralon@honor <none@none>2010-10-07 22:50:33 -0700
committeralon@honor <none@none>2010-10-07 22:50:33 -0700
commitd0eb15c81a09cf011c5f660413e593b0c09ff5fb (patch)
treea71c70048458637f3a595a7e39b5cfee130a3e4a /src
parent4de0755572570e6de83788998e8288724b45b2fa (diff)
begin work to adapt to llvm 2.8 | TESTS BROKEN
Diffstat (limited to 'src')
-rw-r--r--src/intertyper.js25
-rw-r--r--src/jsifier.js4
-rw-r--r--src/library.js1
-rw-r--r--src/preamble.js2
4 files changed, 25 insertions, 7 deletions
diff --git a/src/intertyper.js b/src/intertyper.js
index 3092a310..6333492d 100644
--- a/src/intertyper.js
+++ b/src/intertyper.js
@@ -3,6 +3,8 @@
function intertyper(data) {
// Substrate
+ LLVM_STYLE = data.indexOf('<label>') == -1 ? 'old' : 'new'; // new = clang on 2.8, old = llvm-gcc anywhere or clang on 2.7
+
substrate = new Substrate('Intertyper');
// Line splitter.
@@ -153,15 +155,16 @@ function intertyper(data) {
processItem: function(item) {
function triage() {
if (!item.intertype) {
- if (item.tokens[0].text in searchable(';', 'target'))
- return '/dev/null';
if (item.tokens.length >= 3 && item.indent === 0 && item.tokens[1].text == '=')
return 'Global';
if (item.tokens.length >= 4 && item.indent === 0 && item.tokens[0].text == 'define' &&
item.tokens.slice(-1)[0].text == '{')
return 'FuncHeader';
- if (item.tokens.length >= 1 && item.indent === 0 && item.tokens[0].text.substr(-1) == ':')
+ if ((item.tokens.length >= 1 && item.indent === 0 && item.tokens[0].text.substr(-1) == ':') || // XXX LLVM 2.7 format, or llvm-gcc in 2.8
+ (item.tokens.length >= 3 && item.indent === 0 && item.tokens[1].text == '<label>'))
return 'Label';
+ if (item.tokens[0].text in searchable(';', 'target'))
+ return '/dev/null';
if (item.indent === 2 && item.tokens && item.tokens.length >= 3 && findTokenText(item, '=') >= 0 &&
!item.intertype)
return 'Assign';
@@ -284,7 +287,7 @@ function intertyper(data) {
item.tokens = item.tokens.filter(function(token) {
return ['noalias', 'available_externally', 'weak', 'internal', 'signext', 'zeroext', 'nounwind', 'define', 'linkonce_odr', 'inlinehint', '{'].indexOf(token.text) == -1;
});
- return [{
+ var ret = [{
__result__: true,
intertype: 'function',
ident: item.tokens[1].text,
@@ -292,6 +295,16 @@ function intertyper(data) {
params: item.tokens[2],
lineNum: item.lineNum,
}];
+ if (LLVM_STYLE == 'new') {
+ // no explicit 'entry' label in clang on LLVM 2.8, so we add one
+ ret.push({
+ __result__: true,
+ intertype: 'label',
+ ident: '%entry',
+ lineNum: item.lineNum + 'b',
+ });
+ }
+ return ret;
},
});
// label
@@ -300,7 +313,9 @@ function intertyper(data) {
return [{
__result__: true,
intertype: 'label',
- ident: '%' + item.tokens[0].text.substr(0, item.tokens[0].text.length-1),
+ ident: LLVM_STYLE == 'old' ?
+ '%' + item.tokens[0].text.substr(0, item.tokens[0].text.length-1) :
+ '%' + item.tokens[2].text.substr(1),
lineNum: item.lineNum,
}];
},
diff --git a/src/jsifier.js b/src/jsifier.js
index 66beb0bf..12017e2a 100644
--- a/src/jsifier.js
+++ b/src/jsifier.js
@@ -440,7 +440,9 @@ function JSify(data) {
var LABEL_IDs = {};
var LABEL_ID_COUNTER = 0;
function getLabelId(label) {
- //print('needs id: ' + label + ' : ' + JSON.stringify(LABEL_IDs));
+ label = label.substr(1);
+ if (label === 'entry') return '-1';
+ if (label === parseInt(label)) return label; // clang
label = toNiceIdent(label);
if (label in LABEL_IDs) return LABEL_IDs[label];
return LABEL_IDs[label] = LABEL_ID_COUNTER ++;
diff --git a/src/library.js b/src/library.js
index 08d62309..7fa4b979 100644
--- a/src/library.js
+++ b/src/library.js
@@ -137,6 +137,7 @@ var Library = {
HEAP[ptr+i] = value;
}
},
+ llvm_memset_p0i8_i32: 'llvm_memset_i32',
llvm_eh_exception: function() {
return 'code-generated exception: ' + (new Error().stack);
diff --git a/src/preamble.js b/src/preamble.js
index a2efad57..5496170d 100644
--- a/src/preamble.js
+++ b/src/preamble.js
@@ -1,4 +1,3 @@
-
// === Auto-generated preamble library stuff ===
function __globalConstructor__() {
@@ -207,6 +206,7 @@ function _llvm_memcpy_i32(dest, src, num, idunno) {
// dest.slab = src.slab.slice(src.pos);
}
_llvm_memcpy_i64 = _llvm_memcpy_i32;
+_llvm_memcpy_p0i8_p0i8_i32 = _llvm_memcpy_i32;
// Tools