I find the following code sefaults in gc, around N=18. What am I overlooking...??
Thanks, Mitchell .sub _main .param pmc argv .sym int argc argc = argv .sym int N N = 24 if argc <= 1 goto noarg $S0 = argv[1] N = $S0 noarg: .sym float start time start .local pmc A .local pmc B .local pmc obj newclass A, "A" subclass B, A, "B" find_type $I0, "B" new obj, $I0 .local pmc retc1 newsub retc1, .RetContinuation, label1 .pcc_begin prototyped .arg N .invocant obj .meth_call "fibA", retc1 label1: .local int r .result r .pcc_end .sym float fin time fin print "fib(" print N print ") = " print r print " " sub fin, start print fin print "s\n" end .end .namespace [ "A" ] .sub fibA method .param int n if n >= 2 goto rec .pcc_begin_return .return n .pcc_end_return rec: .sym int n1 .sym int n2 .sym int r1 .sym int r2 n1 = n - 1 n2 = n - 2 .local pmc retc2 newsub retc2, .RetContinuation, label2 .pcc_begin prototyped .arg n1 .invocant self .meth_call "fibB", retc2 label2: .result r1 .pcc_end .local pmc retc3 newsub retc3, .RetContinuation, label3 .pcc_begin prototyped .arg n2 .invocant self .meth_call "fibB", retc3 label3: .result r2 .pcc_end n = r1 + r2 .pcc_begin_return .return n .pcc_end_return .end .namespace [ "B" ] .sub fibB method .param int n if n >= 2 goto rec .pcc_begin_return .return n .pcc_end_return rec: .sym int n1 .sym int n2 .sym int r1 .sym int r2 n1 = n - 1 n2 = n - 2 .local pmc retc4 newsub retc4, .RetContinuation, label4 .pcc_begin prototyped .arg n1 .invocant self .meth_call "fibA", retc4 label4: .result r1 .pcc_end .local pmc retc5 newsub retc5, .RetContinuation, label5 .pcc_begin prototyped .arg n2 .invocant self .meth_call "fibA", retc5 label5: .result r2 .pcc_end n = r1 + r2 .pcc_begin_return .return n .pcc_end_return .end