diff options
Diffstat (limited to 'deps/lightning/check/rpn.tst')
-rw-r--r-- | deps/lightning/check/rpn.tst | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/deps/lightning/check/rpn.tst b/deps/lightning/check/rpn.tst new file mode 100644 index 0000000..62ef8d6 --- /dev/null +++ b/deps/lightning/check/rpn.tst @@ -0,0 +1,183 @@ +.data 256 +.$($int = 4) +C: +.c "\nC:" +F: +.c "\nF:" +format: +.c "%3d " +newline: +.c "\n" + +.code + jmpi main + + name c2f +c2f: + prolog + arg $in + + allocai $(32 * $int) $index + + getarg %r2 $in + + // 32x9*5/+ + movi %r0 32 + + // x9*5/+ + stxi_i $index %fp %r0 +. $($index = $index + $int) + movr %r0 %r2 + + // 9*5/+ + stxi_i $index %fp %r0 +. $($index = $index + $int) + movi %r0 9 + + // *5/+ +. $($index = $index - $int) + ldxi_i %r1 %fp $index + mulr %r0 %r1 %r0 + + // 5/+ + stxi_i $index %fp %r0 +. $($index = $index + $int) + movi %r0 5 + + // /+ +. $($index = $index - $int) + ldxi_i %r1 %fp $index + divr %r0 %r1 %r0 + + // + +. $($index = $index - $int) + ldxi_i %r1 %fp $index + addr %r0 %r1 %r0 + + retr %r0 + epilog + + name f2c +f2c: + prolog + arg $in + + allocai $(32 * $int) $index + + getarg %r2 $in + + // x32-5*9/ + stxi_i $index %fp %r0 +. $($index = $index + $int) + movr %r0 %r2 + + // 32-5*9/ + stxi_i $index %fp %r0 +. $($index = $index + $int) + movi %r0 32 + + // -5*9/ +. $($index = $index - $int) + ldxi_i %r1 %fp $index + subr %r0 %r1 %r0 + + // 5*9/ + stxi_i $index %fp %r0 +. $($index = $index + $int) + movi %r0 5 + + // *9/ +. $($index = $index - $int) + ldxi_i %r1 %fp $index + mulr %r0 %r1 %r0 + + // 9/ + stxi_i $index %fp %r0 +. $($index = $index + $int) + movi %r0 9 + + // / +. $($index = $index - $int) + ldxi_i %r1 %fp $index + divr %r0 %r1 %r0 + + retr %r0 + epilog + +//----------------------------------------------------------------------- + name main +main: + prolog + + prepare + pushargi C + ellipsis + finishi @printf + movi %v0 0 +loopC: + prepare + pushargi format + ellipsis + pushargr %v0 + finishi @printf + addi %v0 %v0 10 + blei loopC %v0 100 + prepare + pushargi F + ellipsis + finishi @printf + movi %v0 0 +loopC2F: + prepare + pushargr %v0 + finishi c2f + retval %r0 + prepare + pushargi format + ellipsis + pushargr %r0 + finishi @printf + addi %v0 %v0 10 + blei loopC2F %v0 100 + prepare + pushargi newline + ellipsis + finishi @printf + + prepare + pushargi F + ellipsis + finishi @printf + movi %v0 32 +loopF: + prepare + pushargi format + ellipsis + pushargr %v0 + finishi @printf + addi %v0 %v0 18 + blei loopF %v0 212 + prepare + pushargi C + ellipsis + finishi @printf + movi %v0 32 +loopF2C: + prepare + pushargr %v0 + finishi f2c + retval %r0 + prepare + pushargi format + ellipsis + pushargr %r0 + finishi @printf + addi %v0 %v0 18 + blei loopF2C %v0 212 + prepare + pushargi newline + ellipsis + finishi @printf + + ret + epilog |