package cpustream;

import com.maxeler.maxcompiler.v2.kernelcompiler.Kernel;
import com.maxeler.maxcompiler.v2.kernelcompiler.KernelParameters;
import com.maxeler.maxcompiler.v2.kernelcompiler.types.base.DFEType;
import com.maxeler.maxcompiler.v2.kernelcompiler.types.base.DFEVar;

class CpuStreamKernel extends Kernel {

	// intovi ne moraju da budu 32, u principu kada se radi final verzija
	// najbolje je odabrati najmanji koji odgovara
	private static final DFEType type1 = dfeInt(32);
	// kod float-a vodimo racuna o kompromisu izmedju preciznosti i opsega
	private static final DFEType type2 = dfeFloat(8, 24);

	protected CpuStreamKernel(KernelParameters parameters) {
		super(parameters);

		DFEVar a = io.input("a", type1);
		DFEVar b = io.input("b", type1);

		// ~a.eq(b) <=> a!=b u c-u
		DFEVar cval = ~a.eq(b) ? b - a : a;
		DFEVar dval = ~a.eq(b) ? (a * b).cast(type2) / cval.cast(type2) : (a + b).cast(type2);

		io.output("c", cval, type1);
		io.output("d", dval, type2);
	}

}
