From 5ea32e69433d0c850d02bbc1e6c4a260bc095fec Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Thu, 1 Oct 2026 12:01:57 -0700 Subject: Move debug printing into shared space Same as the graph viewer, moves a lot of code out of all Nodes --- .../java/com/seaofnodes/simple/ASMPrinter.java | 173 +++-------- .../main/java/com/seaofnodes/simple/CodeGen.java | 2 +- .../main/java/com/seaofnodes/simple/IRPrinter.java | 342 +++------------------ .../java/com/seaofnodes/simple/node/AddFNode.java | 9 +- .../java/com/seaofnodes/simple/node/AddNode.java | 9 +- .../java/com/seaofnodes/simple/node/BoolNode.java | 10 +- .../java/com/seaofnodes/simple/node/CProjNode.java | 5 +- .../com/seaofnodes/simple/node/CallEndNode.java | 14 +- .../java/com/seaofnodes/simple/node/CallNode.java | 16 +- .../java/com/seaofnodes/simple/node/CastNode.java | 10 +- .../com/seaofnodes/simple/node/ConstantNode.java | 17 +- .../java/com/seaofnodes/simple/node/CtrlNode.java | 5 +- .../java/com/seaofnodes/simple/node/DivFNode.java | 9 +- .../java/com/seaofnodes/simple/node/DivNode.java | 9 +- .../java/com/seaofnodes/simple/node/FRefNode.java | 8 +- .../java/com/seaofnodes/simple/node/IfNode.java | 8 +- .../java/com/seaofnodes/simple/node/LoadNode.java | 5 +- .../com/seaofnodes/simple/node/LogicalNode.java | 10 +- .../seaofnodes/simple/node/MachConcreteNode.java | 12 +- .../com/seaofnodes/simple/node/MemMergeNode.java | 13 +- .../java/com/seaofnodes/simple/node/MemOpNode.java | 6 +- .../com/seaofnodes/simple/node/MinusFNode.java | 8 +- .../java/com/seaofnodes/simple/node/MinusNode.java | 8 +- .../java/com/seaofnodes/simple/node/MulFNode.java | 9 +- .../java/com/seaofnodes/simple/node/MulNode.java | 9 +- .../java/com/seaofnodes/simple/node/NeverNode.java | 5 +- .../java/com/seaofnodes/simple/node/NewNode.java | 9 +- .../main/java/com/seaofnodes/simple/node/Node.java | 67 +--- .../java/com/seaofnodes/simple/node/NotNode.java | 8 +- .../java/com/seaofnodes/simple/node/ParmNode.java | 19 +- .../java/com/seaofnodes/simple/node/PhiNode.java | 19 +- .../java/com/seaofnodes/simple/node/ProjNode.java | 11 +- .../com/seaofnodes/simple/node/ReadOnlyNode.java | 7 +- .../com/seaofnodes/simple/node/RegionNode.java | 7 +- .../com/seaofnodes/simple/node/ReturnNode.java | 11 +- .../com/seaofnodes/simple/node/RoundF32Node.java | 7 +- .../java/com/seaofnodes/simple/node/ScopeNode.java | 28 +- .../java/com/seaofnodes/simple/node/StartNode.java | 8 +- .../java/com/seaofnodes/simple/node/StopNode.java | 13 +- .../java/com/seaofnodes/simple/node/StoreNode.java | 7 +- .../com/seaofnodes/simple/node/StructNode.java | 18 +- .../java/com/seaofnodes/simple/node/SubFNode.java | 9 +- .../java/com/seaofnodes/simple/node/SubNode.java | 9 +- .../com/seaofnodes/simple/node/ToFloatNode.java | 7 +- .../java/com/seaofnodes/simple/node/XCtrlNode.java | 5 +- .../simple/node/cpus/riscv/MemOpRISC.java | 5 +- .../simple/node/cpus/x86_64_v2/MemOpX86.java | 5 +- .../simple/node/cpus/x86_64_v2/StoreX86.java | 7 +- .../simple/print/SimpleGraphAdapter.java | 38 +-- 49 files changed, 292 insertions(+), 763 deletions(-) (limited to 'chapter19/src/main/java/com/seaofnodes') diff --git a/chapter19/src/main/java/com/seaofnodes/simple/ASMPrinter.java b/chapter19/src/main/java/com/seaofnodes/simple/ASMPrinter.java index 5cc13210..3c4162ea 100644 --- a/chapter19/src/main/java/com/seaofnodes/simple/ASMPrinter.java +++ b/chapter19/src/main/java/com/seaofnodes/simple/ASMPrinter.java @@ -1,140 +1,51 @@ package com.seaofnodes.simple; -import com.seaofnodes.simple.node.*; +import com.seaofnodes.print.AssemblyAdapter; +import com.seaofnodes.print.ASMPrinter.Data; +import com.seaofnodes.print.ASMPrinter.Pool; +import com.seaofnodes.simple.CodeGen; import com.seaofnodes.simple.SB; -import com.seaofnodes.simple.type.TypeFunPtr; -import com.seaofnodes.simple.type.TypeMem; -import com.seaofnodes.simple.type.TypeRPC; - -public abstract class ASMPrinter { - - public static SB print(SB sb, CodeGen code) { - if( code._cfg==null ) - return sb.p("Need _cfg set, run after GCM"); - - // instruction address - int iadr = 0; - for( int i=0; i { + private final CodeGen _code; + private ASMPrinter(CodeGen code) { + super(new IRPrinter()); + _code=code; } - - private static int print(int iadr, SB sb, CodeGen code, FunNode fun, int cfgidx) { - // Function header - sb.nl().p("---"); - fun.sig().print(sb); - sb.p("---------------------------").nl(); - - - while( !(code._cfg.at(cfgidx) instanceof ReturnNode) ) - iadr = doBlock(iadr,sb,code,fun,cfgidx++); - - // Function separator - sb.p("---"); - fun.sig().print(sb); - sb.p("---------------------------").nl(); - return iadr; + public static SB print(SB sb, CodeGen code) { + return sb.p(new com.seaofnodes.print.ASMPrinter<>(new ASMPrinter(code)).print()); } - - static int doBlock(int iadr, SB sb, CodeGen code, FunNode fun, int cfgidx) { - CFGNode bb = code._cfg.at(cfgidx); - if( bb != fun && !(bb instanceof IfNode) && !(bb instanceof CallEndNode) && !(bb instanceof CallNode) && !(bb instanceof CProjNode && bb.in(0) instanceof CallEndNode )) - sb.p("L").p(bb._nid).p(":").nl(); - - if( !(bb instanceof CallNode) ) - for( Node n : bb._outputs ) - iadr = doInst(iadr, sb,code,fun,bb,n); - - return iadr; + @Override public ArrayList blocks() { + var blocks=new ArrayList(); + var cfg=_code._cfg; + if( cfg!=null ) for( Node n : cfg ) blocks.add(n); + return blocks; } - - static int doInst(int iadr, SB sb, CodeGen code, FunNode fun, CFGNode bb, Node n) { - final int encWidth = 8; - final int opWidth = 5; - final int argWidth = 30; - - if( n instanceof CProjNode ) return iadr; - - // Phis are useful before (and during) reg alloc - if( n instanceof PhiNode phi ) { - if( phi._type instanceof TypeMem || phi._type instanceof TypeRPC ) return iadr; // Nothing for the hidden ones - sb.fix(4," ").p(" ").fix(encWidth,"").p(" ").fix(opWidth,phi._label).p(" "); - sb.p(code.reg(n)); - if( !(n instanceof ParmNode) ) { - sb.p(" = phi( "); - for( int i=1; i