diff options
Diffstat (limited to 'rts.ll')
-rw-r--r-- | rts.ll | 17 |
1 files changed, 16 insertions, 1 deletions
@@ -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 |