(d0 d1 d2 d3 d4 d5 d6 d7 d8 d9) = SWAPSTACK s RET_WITH<double double double double double double double double double double> PASS_VALUES<stackref>(cs <double>0.0 d <double>1.0 d <double>2.0 d <double>3.0 d <double>4.0 d <double>5.0 d <double>6.0 d <double>7.0 d <double>8.0 d <double>9.0 d)
(d0 d1 d2 d3 d4 d5 d6 d7 d8 d9) = SWAPSTACK s RET_WITH<double double double double double double double double double double> PASS_VALUES<stackref double double double double double double double double double double>(cs <double>0.0 d <double>1.0 d <double>2.0 d <double>3.0 d <double>4.0 d <double>5.0 d <double>6.0 d <double>7.0 d <double>8.0 d <double>9.0 d)
s1 = FADD <double> d0 d1
s2 = FADD <double> s1 d2
s3 = FADD <double> s2 d3
...
...
@@ -132,6 +153,54 @@ def test_swapstack_throw():
""","test_swapstack_throw");
assert(execute("test_swapstack_throw",[])==3);
deftest_swapstack_throw_back_simple():
compile_bundle(
"""
.funcdef new_func <(stackref)->()>
{
entry(<stackref>s):
cs = COMMINST uvm.current_stack()
er = NEW <stackref>
eri = GETIREF <stackref> er
STORE <stackref> eri cs
ev = REFCAST <ref<stackref> ref<void>> er
r = SWAPSTACK s RET_WITH<int<32>> THROW_EXC ev EXC(nor_dest(r) exc_dest())