@@ -275,38 +275,89 @@ func execute(pc ImmediateData, program []Operation, accumulator int64) (int64, i
275275 if Debug {
276276 log .Debugf ("AndI at PC: %d, value: %d -> %d" , pc , op .OperandInt64 (), accumulator )
277277 }
278- case JNZ :
279- if accumulator != 0 {
278+ case JNE :
279+ param := op .OperandInt64 ()
280+ addr := param >> 8
281+ value := param & 0xFF
282+ if accumulator != value {
280283 if Debug {
281- log .Debugf ("JNZ at PC: %d, jumping to PC: +%d" , pc , op . OperandInt64 () )
284+ log .Debugf ("JNE at PC: %d, jumping to PC: +%d" , pc , addr )
282285 }
283- pc += op . Operand ( )
286+ pc += ImmediateData ( addr )
284287 continue
285288 }
286289 if Debug {
287- log .Debugf ("JNZ at PC: %d, not jumping" , pc )
290+ log .Debugf ("JNE at PC: %d, not jumping" , pc )
288291 }
289- case JNEG :
290- if accumulator < 0 {
292+ case JEQ :
293+ param := op .OperandInt64 ()
294+ addr := param >> 8
295+ value := param & 0xFF
296+ if accumulator == value {
291297 if Debug {
292- log .Debugf ("JNEG at PC: %d, jumping to PC: +%d" , pc , op . OperandInt64 () )
298+ log .Debugf ("JEQ at PC: %d, jumping to PC: +%d" , pc , addr )
293299 }
294- pc += op . Operand ( )
300+ pc += ImmediateData ( addr )
295301 continue
296302 }
297303 if Debug {
298- log .Debugf ("JNEG at PC: %d, not jumping" , pc )
304+ log .Debugf ("JEQ at PC: %d, not jumping" , pc )
299305 }
300- case JPOS :
301- if accumulator >= 0 {
306+ case JLT :
307+ param := op .OperandInt64 ()
308+ addr := param >> 8
309+ value := param & 0xFF
310+ if accumulator < value {
302311 if Debug {
303- log .Debugf ("JPOS at PC: %d, jumping to PC: +%d" , pc , op . OperandInt64 () )
312+ log .Debugf ("JLT at PC: %d, jumping to PC: +%d" , pc , addr )
304313 }
305- pc += op . Operand ( )
314+ pc += ImmediateData ( addr )
306315 continue
307316 }
308317 if Debug {
309- log .Debugf ("JPOS at PC: %d, not jumping" , pc )
318+ log .Debugf ("JLT at PC: %d, not jumping" , pc )
319+ }
320+ case JGT :
321+ param := op .OperandInt64 ()
322+ addr := param >> 8
323+ value := param & 0xFF
324+ if accumulator > value {
325+ if Debug {
326+ log .Debugf ("JGT at PC: %d, jumping to PC: +%d" , pc , addr )
327+ }
328+ pc += ImmediateData (addr )
329+ continue
330+ }
331+ if Debug {
332+ log .Debugf ("JGT at PC: %d, not jumping" , pc )
333+ }
334+ case JGTE :
335+ param := op .OperandInt64 ()
336+ addr := param >> 8
337+ value := param & 0xFF
338+ if accumulator >= value {
339+ if Debug {
340+ log .Debugf ("JGTE at PC: %d, jumping to PC: +%d" , pc , addr )
341+ }
342+ pc += ImmediateData (addr )
343+ continue
344+ }
345+ if Debug {
346+ log .Debugf ("JGTE at PC: %d, not jumping" , pc )
347+ }
348+ case JLTE :
349+ param := op .OperandInt64 ()
350+ addr := param >> 8
351+ value := param & 0xFF
352+ if accumulator <= value {
353+ if Debug {
354+ log .Debugf ("JLTE at PC: %d, jumping to PC: +%d" , pc , addr )
355+ }
356+ pc += ImmediateData (addr )
357+ continue
358+ }
359+ if Debug {
360+ log .Debugf ("JLTE at PC: %d, not jumping" , pc )
310361 }
311362 case JumpR :
312363 if Debug {
0 commit comments