package org.jerlang.erts.emulator.op; import org.jerlang.Module; import org.jerlang.Process; import org.jerlang.erts.emulator.Instruction; import org.jerlang.type.Integer; import org.jerlang.type.List; import org.jerlang.type.Term; import org.jerlang.type.Tuple; /** * is greater or equal * * Arguments: * 1. Lbl * 2. Arg1 * 3. Arg2 * * Compare two terms and jump to Lbl if Arg1 is less than Arg2. */ public class IsGe { public static Term execute(Process proc, Module m, Instruction i, List params) { Term lbl = i.arg(0); Term arg1 = i.arg(1); Term arg2 = i.arg(2); if (arg1 instanceof Tuple && arg2 instanceof Integer) { int registerIndex = arg1.toTuple().element(2).toInteger().toInt(); Integer a = proc.registers()[registerIndex].toInteger(); Integer b = arg2.toInteger(); if (a.toInt() < b.toInt()) { return lbl; } else { return null; } } else { throw new Error("Can not compare: " + arg1 + " / " + arg2); } } }