To protect your data, the CISO officer has suggested users to enable GitLab 2FA as soon as possible.

Commit 5d383563 authored by Kunshan Wang's avatar Kunshan Wang
Browse files

Fixed the factorial result from RPython.

parent d1171fa4
...@@ -3,6 +3,7 @@ if [ x$SED == x ]; then ...@@ -3,6 +3,7 @@ if [ x$SED == x ]; then
SED=sed SED=sed
fi fi
$SED -i 's/newClientAgent/newContext/g' $FN $SED -i 's/newClientAgent/newContext/g' $FN
$SED -i 's/ClientAgent/MuCtx/g' $FN
$SED -i 's/deleteHandle/deleteValue/g' $FN $SED -i 's/deleteHandle/deleteValue/g' $FN
$SED -i 's/\bca\b/ctx/g' $FN $SED -i 's/\bca\b/ctx/g' $FN
$SED -i 's/ctx\.close()/ctx.closeContext()/g' $FN $SED -i 's/ctx\.close()/ctx.closeContext()/g' $FN
......
...@@ -8,7 +8,7 @@ $SED -i 's/COMMINST\s*@uvm\.new_thread\s*(\([@%]\w\+\))/NEWTHREAD \1 PASS_VALUES ...@@ -8,7 +8,7 @@ $SED -i 's/COMMINST\s*@uvm\.new_thread\s*(\([@%]\w\+\))/NEWTHREAD \1 PASS_VALUES
$SED -i 's/TRAP\s*<@void>/TRAP <>/g' $FN $SED -i 's/TRAP\s*<@void>/TRAP <>/g' $FN
$SED -i 's/noparamsnoret/v_v/g' $FN $SED -i 's/noparamsnoret/v_v/g' $FN
$SED -i 's/@funcdumb/@frv_v/g' $FN $SED -i 's/@funcdumb/@frv_v/g' $FN
$SED -i '/\.funcsig/ {s/@void\s*(\([^)]*\))/(\1) -> ()}/g' $FN $SED -i '/\.funcsig/ {s/@void\s*(\([^)]*\))/(\1) -> ()/g}' $FN
$SED -i '/\.funcsig/ {s/=\s*\(@\w\+\)\s*(\([^)]*\))/= (\2) -> (\1)/}' $FN $SED -i '/\.funcsig/ {s/=\s*\(@\w\+\)\s*(\([^)]*\))/= (\2) -> (\1)/}' $FN
$SED -i 's/@i_ii/@ii_i/g' $FN $SED -i 's/@i_ii/@ii_i/g' $FN
$SED -i 's/RET @VOID/RET ()/g' $FN $SED -i 's/RET @VOID/RET ()/g' $FN
......
package junks package junks
import uvm.refimpl._ import uvm.refimpl._
import uvm.refimpl.TrapHandlerResult.Rebind
import uvm.refimpl.HowToResume.PassValues
object FactorialFromRPython extends App { object FactorialFromRPython extends App {
val microVM = new MicroVM() val microVM = new MicroVM()
val ca = microVM.newClientAgent() val ctx = microVM.newContext()
val r = new java.io.FileReader("tests/extra-progs/factorial.uir") val r = new java.io.FileReader("tests/extra-progs/factorial.uir")
ca.loadBundle(r) ctx.loadBundle(r)
r.close() r.close()
val m = ca.putFunction(microVM.idOf("@main")) val m = ctx.handleFromFunc(microVM.idOf("@main"))
microVM.trapManager.trapHandler = new TrapHandler { microVM.setTrapHandler(new TrapHandler {
override def handleTrap(ca: ClientAgent, thread: Handle, stack: Handle, watchPointID: Int): TrapHandlerResult = { override def handleTrap(ctx: MuCtx, thread: MuThreadRefValue, stack: MuStackRefValue, watchPointID: Int): TrapHandlerResult = {
val curInst = ca.currentInstruction(stack, 0) val curInst = ctx.curInst(stack, 0)
val trapName = microVM.nameOf(curInst) val trapName = microVM.nameOf(curInst)
if (trapName == "@main_v1.main_trap") { if (trapName == "@main_v1.entry.main_trap") {
val kas = ca.dumpKeepalives(stack, 0) val kas = ctx.dumpKeepalives(stack, 0)
val Seq(rv) = kas val Seq(rv) = kas
val i = ca.toInt(rv, signExt = true) val i = ctx.handleToSInt(rv.asInstanceOf[MuIntValue])
println(i) println(i)
} else { } else {
throw new RuntimeException("Hit the wrong trap: " + trapName) throw new RuntimeException("Hit the wrong trap: " + trapName)
} }
TrapRebindPassVoid(stack) // continue Rebind(stack, PassValues(Seq())) // continue
} }
} })
val sta = ca.newStack(m, Seq()) val sta = ctx.newStack(m)
val thr = ca.newThread(sta) val thr = ctx.newThread(sta, PassValues(Seq()))
microVM.execute() // run until all threads stop microVM.execute() // run until all threads stop
ca.close() ctx.closeContext()
} }
\ No newline at end of file
...@@ -6,34 +6,30 @@ ...@@ -6,34 +6,30 @@
.typedef @int_8 = int<8> .typedef @int_8 = int<8>
.typedef @int_32 = int<32> .typedef @int_32 = int<32>
.const @int_64_1 <@int_64> = 1 .const @int_64_1 <@int_64> = 1
.funcsig @fac_sig = @int_64 (@int_64) .funcsig @fac_sig = (@int_64) -> (@int_64)
.funcdef @fac VERSION @fac_v1 <@fac_sig> (%n_3) .funcdef @fac VERSION @fac_v1 <@fac_sig>
{ {
%blk_0: %blk_0(<@int_64> %n_3):
%v48 = EQ <@int_64> %n_3 @int_64_1 %v48 = EQ <@int_64> %n_3 @int_64_1
BRANCH2 %v48 %blk_2 %blk_1 BRANCH2 %v48 %blk_2(@int_64_1) %blk_1(%n_3)
%blk_2: %blk_2(<@int_64> %v53):
%v53 = PHI <@int_64> { RET %v53
%blk_1: %v52;
%blk_0: @int_64_1;
}
RET <@int_64> %v53
%blk_1: %blk_1(<@int_64> %n_3):
%v50 = SUB <@int_64> %n_3 @int_64_1 %v50 = SUB <@int_64> %n_3 @int_64_1
%v51 = CALL <@fac_sig> @fac (%v50) %v51 = CALL <@fac_sig> @fac (%v50)
%v52 = MUL <@int_64> %n_3 %v51 %v52 = MUL <@int_64> %n_3 %v51
BRANCH %blk_2 BRANCH %blk_2(%v52)
} }
.const @int_64_10 <@int_32> = 10 .const @int_64_10 <@int_32> = 10
.funcsig @main_sig = @void () .funcsig @main_sig = () -> ()
.funcdef @main VERSION @main_v1 <@main_sig> () { .funcdef @main VERSION @main_v1 <@main_sig> {
%entry: %entry():
%rv = CALL <@fac_sig> @fac (@int_64_10) %rv = CALL <@fac_sig> @fac (@int_64_10)
%main_trap = TRAP <@void> KEEPALIVE (%rv) [%main_trap] TRAP <> KEEPALIVE (%rv)
COMMINST @uvm.thread_exit COMMINST @uvm.thread_exit
} }
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment