aboutsummaryrefslogtreecommitdiff
path: root/rts.ll
diff options
context:
space:
mode:
Diffstat (limited to 'rts.ll')
-rw-r--r--rts.ll17
1 files changed, 16 insertions, 1 deletions
diff --git a/rts.ll b/rts.ll
index 2a9b47a..c625a9f 100644
--- a/rts.ll
+++ b/rts.ll
@@ -53,6 +53,21 @@ loop.0:
br label %loop
}
+; TODO remove only the used positions
+define private void @_cleanup_global_astack(i64** %globasp.0) noinline optnone {
+ %globasp.0.1 = getelementptr i64*, i64** %globasp.0, i64 1
+ %globasp.0.2 = getelementptr i64*, i64** %globasp.0, i64 2
+ %globasp.0.3 = getelementptr i64*, i64** %globasp.0, i64 3
+ %globasp.0.4 = getelementptr i64*, i64** %globasp.0, i64 4
+ %globasp.0.5 = getelementptr i64*, i64** %globasp.0, i64 5
+ store i64* undef, i64** %globasp.0.1
+ store i64* undef, i64** %globasp.0.2
+ store i64* undef, i64** %globasp.0.3
+ store i64* undef, i64** %globasp.0.4
+ store i64* undef, i64** %globasp.0.5
+ ret void
+}
+
define private i64* @addI(i64* %bsp.0) #0 {
%t.0 = load i64, i64* %bsp.0
store i64 undef, i64* %bsp.0
@@ -141,7 +156,6 @@ define private i64** @fillI_b(i64 %b_offset, i64 %a_offset, i64* %bsp.0, i64** %
}
define private i64* @jsr_eval(i64 %n, i64** %asp.0, i64** %aspstart, i64** %globasp.0, i64* %hp.0) #0 {
- ; TODO in case %n != 0 do we need to push it to the top of the stack?
%asp.1 = getelementptr i64*, i64** %asp.0, i64 %n
%n.0 = load i64*, i64** %asp.1
@@ -158,6 +172,7 @@ eval:
%globasp.1 = call i64** @_push_local_astack(i64** %asp.0, i64** %aspstart, i64** %globasp.0)
%nentry.0 = inttoptr i64 %d.0 to {i64*, i64*} (i64*, i64**, i64*)*
%t.2 = call {i64*, i64*} %nentry.0(i64* %hp.0, i64** %globasp.1, i64* %n.0)
+ call void @_cleanup_global_astack(i64** %globasp.0)
%hp.1 = extractvalue {i64*, i64*} %t.2, 0
%n.1 = extractvalue {i64*, i64*} %t.2, 1
store i64* %n.1, i64** %asp.1