Make Operands an array

This commit is contained in:
Ian Gulliver
2021-11-20 09:46:51 -10:00
parent 579ddab2de
commit b4a27cafd3
4 changed files with 67 additions and 72 deletions

View File

@@ -48,131 +48,131 @@ func (state *State) handleNoOp(instr *Instruction) {
}
func (state *State) handleMove(instr *Instruction) {
in := state.readUnsigned(&instr.Operand2)
state.writeUnsigned(&instr.Operand1, in)
in := state.readUnsigned(instr.Operands[1])
state.writeUnsigned(instr.Operands[0], in)
}
func (state *State) handleAdd(instr *Instruction) {
in1 := state.readUnsigned(&instr.Operand1)
in2 := state.readUnsigned(&instr.Operand2)
state.writeUnsigned(&instr.Operand1, in1+in2)
in1 := state.readUnsigned(instr.Operands[0])
in2 := state.readUnsigned(instr.Operands[1])
state.writeUnsigned(instr.Operands[0], in1+in2)
}
func (state *State) handleSubtract(instr *Instruction) {
in1 := state.readUnsigned(&instr.Operand1)
in2 := state.readUnsigned(&instr.Operand2)
state.writeUnsigned(&instr.Operand1, in1-in2)
in1 := state.readUnsigned(instr.Operands[0])
in2 := state.readUnsigned(instr.Operands[1])
state.writeUnsigned(instr.Operands[0], in1-in2)
}
func (state *State) handleMultiply(instr *Instruction) {
in1 := state.readUnsigned(&instr.Operand1)
in2 := state.readUnsigned(&instr.Operand2)
state.writeUnsigned(&instr.Operand1, in1*in2)
in1 := state.readUnsigned(instr.Operands[0])
in2 := state.readUnsigned(instr.Operands[1])
state.writeUnsigned(instr.Operands[0], in1*in2)
}
func (state *State) handleDivideUnsigned(instr *Instruction) {
in1 := state.readUnsigned(&instr.Operand1)
in2 := state.readUnsigned(&instr.Operand2)
state.writeUnsigned(&instr.Operand1, in1/in2)
in1 := state.readUnsigned(instr.Operands[0])
in2 := state.readUnsigned(instr.Operands[1])
state.writeUnsigned(instr.Operands[0], in1/in2)
}
func (state *State) handleDivideSigned(instr *Instruction) {
in1 := state.readSigned(&instr.Operand1)
in2 := state.readSigned(&instr.Operand2)
state.writeSigned(&instr.Operand1, in1/in2)
in1 := state.readSigned(instr.Operands[0])
in2 := state.readSigned(instr.Operands[1])
state.writeSigned(instr.Operands[0], in1/in2)
}
func (state *State) handleNot(instr *Instruction) {
in := state.readUnsigned(&instr.Operand1)
state.writeUnsigned(&instr.Operand1, ^in)
in := state.readUnsigned(instr.Operands[0])
state.writeUnsigned(instr.Operands[0], ^in)
}
func (state *State) handleAnd(instr *Instruction) {
in1 := state.readUnsigned(&instr.Operand1)
in2 := state.readUnsigned(&instr.Operand2)
state.writeUnsigned(&instr.Operand1, in1&in2)
in1 := state.readUnsigned(instr.Operands[0])
in2 := state.readUnsigned(instr.Operands[1])
state.writeUnsigned(instr.Operands[0], in1&in2)
}
func (state *State) handleOr(instr *Instruction) {
in1 := state.readUnsigned(&instr.Operand1)
in2 := state.readUnsigned(&instr.Operand2)
state.writeUnsigned(&instr.Operand1, in1|in2)
in1 := state.readUnsigned(instr.Operands[0])
in2 := state.readUnsigned(instr.Operands[1])
state.writeUnsigned(instr.Operands[0], in1|in2)
}
func (state *State) handleXor(instr *Instruction) {
in1 := state.readUnsigned(&instr.Operand1)
in2 := state.readUnsigned(&instr.Operand2)
state.writeUnsigned(&instr.Operand1, in1^in2)
in1 := state.readUnsigned(instr.Operands[0])
in2 := state.readUnsigned(instr.Operands[1])
state.writeUnsigned(instr.Operands[0], in1^in2)
}
func (state *State) handleShiftRight(instr *Instruction) {
in1 := state.readUnsigned(&instr.Operand1)
in2 := state.readUnsigned(&instr.Operand2)
state.writeUnsigned(&instr.Operand1, in1>>in2)
in1 := state.readUnsigned(instr.Operands[0])
in2 := state.readUnsigned(instr.Operands[1])
state.writeUnsigned(instr.Operands[0], in1>>in2)
}
func (state *State) handleShiftLeft(instr *Instruction) {
in1 := state.readUnsigned(&instr.Operand1)
in2 := state.readUnsigned(&instr.Operand2)
state.writeUnsigned(&instr.Operand1, in1<<in2)
in1 := state.readUnsigned(instr.Operands[0])
in2 := state.readUnsigned(instr.Operands[1])
state.writeUnsigned(instr.Operands[0], in1<<in2)
}
func (state *State) handleIsEqual(instr *Instruction) {
in1 := state.readUnsigned(&instr.Operand1)
in2 := state.readUnsigned(&instr.Operand2)
in1 := state.readUnsigned(instr.Operands[0])
in2 := state.readUnsigned(instr.Operands[1])
state.comparisonResult = (in1 == in2)
}
func (state *State) handleIsLessThanUnsigned(instr *Instruction) {
in1 := state.readUnsigned(&instr.Operand1)
in2 := state.readUnsigned(&instr.Operand2)
in1 := state.readUnsigned(instr.Operands[0])
in2 := state.readUnsigned(instr.Operands[1])
state.comparisonResult = (in1 < in2)
}
func (state *State) handleIsLessThanSigned(instr *Instruction) {
in1 := state.readSigned(&instr.Operand1)
in2 := state.readSigned(&instr.Operand2)
in1 := state.readSigned(instr.Operands[0])
in2 := state.readSigned(instr.Operands[1])
state.comparisonResult = (in1 < in2)
}
func (state *State) handleIsGreaterThanUnsigned(instr *Instruction) {
in1 := state.readUnsigned(&instr.Operand1)
in2 := state.readUnsigned(&instr.Operand2)
in1 := state.readUnsigned(instr.Operands[0])
in2 := state.readUnsigned(instr.Operands[1])
state.comparisonResult = (in1 > in2)
}
func (state *State) handleIsGreaterThanSigned(instr *Instruction) {
in1 := state.readSigned(&instr.Operand1)
in2 := state.readSigned(&instr.Operand2)
in1 := state.readSigned(instr.Operands[0])
in2 := state.readSigned(instr.Operands[1])
state.comparisonResult = (in1 > in2)
}
func (state *State) handleIsLessThanOrEqualUnsigned(instr *Instruction) {
in1 := state.readUnsigned(&instr.Operand1)
in2 := state.readUnsigned(&instr.Operand2)
in1 := state.readUnsigned(instr.Operands[0])
in2 := state.readUnsigned(instr.Operands[1])
state.comparisonResult = (in1 <= in2)
}
func (state *State) handleIsLessThanOrEqualSigned(instr *Instruction) {
in1 := state.readSigned(&instr.Operand1)
in2 := state.readSigned(&instr.Operand2)
in1 := state.readSigned(instr.Operands[0])
in2 := state.readSigned(instr.Operands[1])
state.comparisonResult = (in1 <= in2)
}
func (state *State) handleIsGreaterThanOrEqualUnsigned(instr *Instruction) {
in1 := state.readUnsigned(&instr.Operand1)
in2 := state.readUnsigned(&instr.Operand2)
in1 := state.readUnsigned(instr.Operands[0])
in2 := state.readUnsigned(instr.Operands[1])
state.comparisonResult = (in1 >= in2)
}
func (state *State) handleIsGreaterThanOrEqualSigned(instr *Instruction) {
in1 := state.readSigned(&instr.Operand1)
in2 := state.readSigned(&instr.Operand2)
in1 := state.readSigned(instr.Operands[0])
in2 := state.readSigned(instr.Operands[1])
state.comparisonResult = (in1 >= in2)
}
func (state *State) handleJump(instr *Instruction) {
in := state.readSigned(&instr.Operand1)
in := state.readSigned(instr.Operands[0])
state.jump(in)
}
@@ -189,7 +189,7 @@ func (state *State) handleJumpIfFalse(instr *Instruction) {
}
func (state *State) handleCall(instr *Instruction) {
in := state.readSigned(&instr.Operand1)
in := state.readSigned(instr.Operands[0])
state.call(in)
}