@ph = ( "", ".few", ".many" ); @bwh = ( ".sptk", ".spnt", ".dptk", ".dpnt" ); @dh = ( "", ".clr" ); @iprel = ( ".cond", ".wexit", ".wtop", ".cloop", ".cexit", ".ctop", ".call" ); @indir = ( ".cond", ".ia", ".ret", ".call" ); %noqual = ( ".ia", 1, ".cloop", 1, ".ctop", 1, ".cexit", 1 ); %slottwo = ( ".cloop", 1, ".ctop", 1, ".cexit", 1, ".wtop", 1, ".wexit", 1 ); print ".L0:\n\n"; foreach $i (@iprel) { $call = ($i eq ".call" ? "b0 = " : ""); foreach $b (@bwh) { foreach $p (@ph) { foreach $d (@dh) { if ($slottwo{$i}) { if (!$noqual{$i}) { print ("\t{ .bbb; (p2) br${i}${b}${p}${d} ${call}.L1 ;; }\n"); } print ("\t{ .bbb; br${i}${b}${p}${d} ${call}.L1 ;; }\n"); } else { print ("\t{ .bbb; nop.b 0\n"); if (!$noqual{$i}) { print ("(p2)\tbr${i}${b}${p}${d} ${call}.L1\n"); } else { print ("\tnop.b 0\n"); } print ("\tbr${i}${b}${p}${d} ${call}.L0\n"); print ("\t;; }\n"); } } } } print "\n"; } foreach $i (@indir) { $call = ($i eq ".call" ? "b0 = " : ""); foreach $b (@bwh) { foreach $p (@ph) { foreach $d (@dh) { print ("\t{ .bbb; nop.b 0;\n"); if (!$noqual{$i}) { print ("(p2)\tbr${i}${b}${p}${d} ${call}b2\n"); } else { print ("\tnop.b 0\n"); } print ("\tbr${i}${b}${p}${d} ${call}b2\n"); print ("\t;; }\n"); } } } print "\n"; } @ih = ( "", ".imp" ); @ipwh = ( ".sptk", ".loop", ".dptk", ".exit" ); @indwh = ( ".sptk", ".dptk" ); $CTR = 2; foreach $w (@ipwh) { foreach $i (@ih) { print ("\t{ .bbb; break.b 0; nop.b 0\n"); print ("\tbrp${w}${i} .L0, .L${CTR}\n"); print ("\t;; }\n"); } print (".L${CTR}:\n"); ++$CTR; } print "\n"; foreach $b ("", ".ret") { foreach $w (@indwh) { foreach $i (@ih) { print ("\t{ .bbb; break.b 0; nop.b 0\n"); print ("\tbrp${b}${w}${i} b3, .L${CTR}\n"); print ("\t;; }\n"); } print (".L${CTR}:\n"); ++$CTR; } print "\n"; } print ".space 5888\n"; @last = ( "cover", "clrrrb", "clrrrb.pr", "rfi", "bsw.0", "bsw.1", "epc" ); foreach $i (@last) { print "\t{ .bbb; nop.b 0; nop.b 0; $i ;; }\n"; } print "\n.L1:\n"; |