From 9d6e0fd1f8720f92164a3163d2f87a642300145d Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Fri, 7 Feb 2025 09:12:14 -0800 Subject: Chapter20 initial push --- .../java/com/seaofnodes/simple/ASMPrinter.java | 140 ++ .../src/main/java/com/seaofnodes/simple/Ary.java | 217 +++ .../main/java/com/seaofnodes/simple/CodeGen.java | 288 ++++ .../com/seaofnodes/simple/GlobalCodeMotion.java | 241 +++ .../com/seaofnodes/simple/GraphVisualizer.java | 288 ++++ .../main/java/com/seaofnodes/simple/IRPrinter.java | 279 ++++ .../main/java/com/seaofnodes/simple/IterPeeps.java | 196 +++ .../main/java/com/seaofnodes/simple/JSViewer.java | 402 +++++ .../java/com/seaofnodes/simple/ListScheduler.java | 231 +++ .../main/java/com/seaofnodes/simple/Machine.java | 21 + .../main/java/com/seaofnodes/simple/Parser.java | 1729 ++++++++++++++++++++ .../main/java/com/seaofnodes/simple/RegMask.java | 39 + .../src/main/java/com/seaofnodes/simple/SB.java | 91 ++ .../com/seaofnodes/simple/SimpleWebSocket.java | 148 ++ .../src/main/java/com/seaofnodes/simple/Utils.java | 53 + .../src/main/java/com/seaofnodes/simple/Var.java | 55 + .../java/com/seaofnodes/simple/node/AddFNode.java | 44 + .../java/com/seaofnodes/simple/node/AddNode.java | 190 +++ .../java/com/seaofnodes/simple/node/AndNode.java | 58 + .../java/com/seaofnodes/simple/node/BoolNode.java | 134 ++ .../java/com/seaofnodes/simple/node/CFGNode.java | 162 ++ .../java/com/seaofnodes/simple/node/CProjNode.java | 62 + .../com/seaofnodes/simple/node/CallEndNode.java | 90 + .../java/com/seaofnodes/simple/node/CallNode.java | 146 ++ .../java/com/seaofnodes/simple/node/CastNode.java | 58 + .../com/seaofnodes/simple/node/ConstantNode.java | 70 + .../java/com/seaofnodes/simple/node/CtrlNode.java | 15 + .../java/com/seaofnodes/simple/node/DivFNode.java | 46 + .../java/com/seaofnodes/simple/node/DivNode.java | 46 + .../java/com/seaofnodes/simple/node/FRefNode.java | 35 + .../java/com/seaofnodes/simple/node/FunNode.java | 149 ++ .../java/com/seaofnodes/simple/node/IfNode.java | 69 + .../java/com/seaofnodes/simple/node/LoadNode.java | 210 +++ .../com/seaofnodes/simple/node/LogicalNode.java | 29 + .../java/com/seaofnodes/simple/node/LoopNode.java | 86 + .../seaofnodes/simple/node/MachConcreteNode.java | 27 + .../java/com/seaofnodes/simple/node/MachNode.java | 49 + .../com/seaofnodes/simple/node/MemMergeNode.java | 154 ++ .../java/com/seaofnodes/simple/node/MemOpNode.java | 74 + .../com/seaofnodes/simple/node/MinusFNode.java | 36 + .../java/com/seaofnodes/simple/node/MinusNode.java | 40 + .../java/com/seaofnodes/simple/node/MulFNode.java | 51 + .../java/com/seaofnodes/simple/node/MulNode.java | 81 + .../java/com/seaofnodes/simple/node/MultiNode.java | 29 + .../java/com/seaofnodes/simple/node/NeverNode.java | 21 + .../java/com/seaofnodes/simple/node/NewNode.java | 83 + .../main/java/com/seaofnodes/simple/node/Node.java | 640 ++++++++ .../java/com/seaofnodes/simple/node/NotNode.java | 32 + .../java/com/seaofnodes/simple/node/OrNode.java | 55 + .../java/com/seaofnodes/simple/node/ParmNode.java | 48 + .../java/com/seaofnodes/simple/node/PhiNode.java | 201 +++ .../java/com/seaofnodes/simple/node/ProjNode.java | 55 + .../com/seaofnodes/simple/node/ReadOnlyNode.java | 30 + .../com/seaofnodes/simple/node/RegionNode.java | 126 ++ .../com/seaofnodes/simple/node/ReturnNode.java | 129 ++ .../com/seaofnodes/simple/node/RoundF32Node.java | 38 + .../java/com/seaofnodes/simple/node/SarNode.java | 50 + .../java/com/seaofnodes/simple/node/ScopeNode.java | 428 +++++ .../java/com/seaofnodes/simple/node/ShlNode.java | 53 + .../java/com/seaofnodes/simple/node/ShrNode.java | 46 + .../java/com/seaofnodes/simple/node/StartNode.java | 58 + .../java/com/seaofnodes/simple/node/StopNode.java | 64 + .../java/com/seaofnodes/simple/node/StoreNode.java | 113 ++ .../com/seaofnodes/simple/node/StructNode.java | 46 + .../java/com/seaofnodes/simple/node/SubFNode.java | 44 + .../java/com/seaofnodes/simple/node/SubNode.java | 59 + .../com/seaofnodes/simple/node/ToFloatNode.java | 34 + .../java/com/seaofnodes/simple/node/XCtrlNode.java | 16 + .../java/com/seaofnodes/simple/node/XorNode.java | 54 + .../simple/node/cpus/x86_64_v2/AddFMemX86.java | 33 + .../simple/node/cpus/x86_64_v2/AddFX86.java | 29 + .../simple/node/cpus/x86_64_v2/AddIX86.java | 39 + .../simple/node/cpus/x86_64_v2/AddMemX86.java | 25 + .../simple/node/cpus/x86_64_v2/AddX86.java | 29 + .../simple/node/cpus/x86_64_v2/AndIX86.java | 42 + .../simple/node/cpus/x86_64_v2/CallRX86.java | 31 + .../simple/node/cpus/x86_64_v2/CallX86.java | 40 + .../simple/node/cpus/x86_64_v2/CmpIX86.java | 43 + .../simple/node/cpus/x86_64_v2/CmpMemX86.java | 33 + .../simple/node/cpus/x86_64_v2/CmpX86.java | 27 + .../simple/node/cpus/x86_64_v2/DivFX86.java | 33 + .../simple/node/cpus/x86_64_v2/DivX86.java | 31 + .../simple/node/cpus/x86_64_v2/FltX86.java | 36 + .../simple/node/cpus/x86_64_v2/FunX86.java | 21 + .../simple/node/cpus/x86_64_v2/I2f8X86.java | 28 + .../simple/node/cpus/x86_64_v2/IntX86.java | 45 + .../simple/node/cpus/x86_64_v2/JmpX86.java | 46 + .../simple/node/cpus/x86_64_v2/LeaX86.java | 42 + .../simple/node/cpus/x86_64_v2/LoadX86.java | 25 + .../simple/node/cpus/x86_64_v2/MemAddX86.java | 28 + .../simple/node/cpus/x86_64_v2/MemOpX86.java | 87 + .../simple/node/cpus/x86_64_v2/MulFX86.java | 30 + .../simple/node/cpus/x86_64_v2/MulIX86.java | 36 + .../simple/node/cpus/x86_64_v2/MulX86.java | 30 + .../simple/node/cpus/x86_64_v2/NewX86.java | 40 + .../simple/node/cpus/x86_64_v2/OrIX86.java | 44 + .../simple/node/cpus/x86_64_v2/ParmX86.java | 24 + .../simple/node/cpus/x86_64_v2/ProjX86.java | 23 + .../simple/node/cpus/x86_64_v2/RetX86.java | 48 + .../simple/node/cpus/x86_64_v2/SarX86.java | 40 + .../simple/node/cpus/x86_64_v2/SetX86.java | 39 + .../simple/node/cpus/x86_64_v2/ShlIX86.java | 38 + .../simple/node/cpus/x86_64_v2/ShrIX86.java | 39 + .../simple/node/cpus/x86_64_v2/StoreX86.java | 30 + .../simple/node/cpus/x86_64_v2/SubFX86.java | 29 + .../simple/node/cpus/x86_64_v2/SubX86.java | 29 + .../simple/node/cpus/x86_64_v2/TFPX86.java | 41 + .../simple/node/cpus/x86_64_v2/XorIX86.java | 42 + .../simple/node/cpus/x86_64_v2/x86_64_v2.java | 418 +++++ .../java/com/seaofnodes/simple/type/Field.java | 74 + .../main/java/com/seaofnodes/simple/type/Type.java | 235 +++ .../java/com/seaofnodes/simple/type/TypeFloat.java | 95 ++ .../com/seaofnodes/simple/type/TypeFunPtr.java | 104 ++ .../com/seaofnodes/simple/type/TypeInteger.java | 128 ++ .../java/com/seaofnodes/simple/type/TypeMem.java | 74 + .../com/seaofnodes/simple/type/TypeMemPtr.java | 105 ++ .../java/com/seaofnodes/simple/type/TypeNil.java | 62 + .../java/com/seaofnodes/simple/type/TypePtr.java | 53 + .../java/com/seaofnodes/simple/type/TypeRPC.java | 100 ++ .../com/seaofnodes/simple/type/TypeStruct.java | 248 +++ .../java/com/seaofnodes/simple/type/TypeTuple.java | 97 ++ 121 files changed, 12369 insertions(+) create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/ASMPrinter.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/Ary.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/CodeGen.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/GlobalCodeMotion.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/GraphVisualizer.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/IRPrinter.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/IterPeeps.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/JSViewer.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/ListScheduler.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/Machine.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/Parser.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/RegMask.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/SB.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/SimpleWebSocket.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/Utils.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/Var.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/AddFNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/AddNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/AndNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/BoolNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/CFGNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/CProjNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/CallEndNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/CallNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/CastNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/ConstantNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/CtrlNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/DivFNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/DivNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/FRefNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/FunNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/IfNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/LoadNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/LogicalNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/LoopNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/MachConcreteNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/MachNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/MemMergeNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/MemOpNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/MinusFNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/MinusNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/MulFNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/MulNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/MultiNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/NeverNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/NewNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/Node.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/NotNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/OrNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/ParmNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/PhiNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/ProjNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/ReadOnlyNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/RegionNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/ReturnNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/RoundF32Node.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/SarNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/ScopeNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/ShlNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/ShrNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/StartNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/StopNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/StoreNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/StructNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/SubFNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/SubNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/ToFloatNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/XCtrlNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/XorNode.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/AddFMemX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/AddFX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/AddIX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/AddMemX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/AddX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/AndIX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/CallRX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/CallX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/CmpIX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/CmpMemX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/CmpX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/DivFX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/DivX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/FltX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/FunX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/I2f8X86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/IntX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/JmpX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/LeaX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/LoadX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/MemAddX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/MemOpX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/MulFX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/MulIX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/MulX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/NewX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/OrIX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/ParmX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/ProjX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/RetX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/SarX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/SetX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/ShlIX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/ShrIX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/StoreX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/SubFX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/SubX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/TFPX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/XorIX86.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/x86_64_v2.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/type/Field.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/type/Type.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/type/TypeFloat.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/type/TypeFunPtr.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/type/TypeInteger.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/type/TypeMem.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/type/TypeMemPtr.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/type/TypeNil.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/type/TypePtr.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/type/TypeRPC.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/type/TypeStruct.java create mode 100644 chapter20/src/main/java/com/seaofnodes/simple/type/TypeTuple.java (limited to 'chapter20/src/main/java/com') diff --git a/chapter20/src/main/java/com/seaofnodes/simple/ASMPrinter.java b/chapter20/src/main/java/com/seaofnodes/simple/ASMPrinter.java new file mode 100644 index 00000000..5cc13210 --- /dev/null +++ b/chapter20/src/main/java/com/seaofnodes/simple/ASMPrinter.java @@ -0,0 +1,140 @@ +package com.seaofnodes.simple; + +import com.seaofnodes.simple.node.*; +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