package jazz.circuit; /////////////////////////////////////////////////////////////////////////////// // // Nets (i.e., circuit wires) // /////////////////////////////////////////////////////////////////////////////// public native final class Net implements BooleanAlgebra, Arith { // Register function public static native reg(x: Net): Net = "%reg"; // The constant generator for nets public static native constant(c: rat): Net = "%net"; // Conditional public static native mux(x: Net, y: Net, z: Net): Net = "%mux"; } /////////////////////////////////////////////////////////////////////////////// // // Implementation // /////////////////////////////////////////////////////////////////////////////// // Boolean algebra operators final native Builtin.(&)(x@Net, y@Net) = "%binary_and"; final native Builtin.(|)(x@Net, y@Net) = "%binary_or"; final native Builtin.(^)(x@Net, y@Net) = "%binary_xor"; final native Builtin.(~)(x@Net) = "%binary_not"; final native Builtin.cond(x@Net, y@Net, z@Net) = "%mux"; // Numeric operators final native Builtin.(*)(x@Net, y@Net) = "%mult"; final native Builtin.(+\2)(x@Net, y@Net) = "%add"; final native Builtin.(+\1)(x@Net) = "%plus"; final native Builtin.(-\2)(x@Net, y@Net) = "%sub"; final native Builtin.(-\1)(x@Net) = "%minus";