def determine_operands
      if( @left.is_a?(Parfait::Object) or @left.is_a?(Risc::Label) or
        (@left.is_a?(Symbol) and !Risc::RegisterValue.look_like_reg(@left)))
        left = @left
        left = left.address if left.is_a?(Risc::Label)
        # do pc relative addressing with the difference to the instuction
        # 8 is for the funny pipeline adjustment (ie pointing to fetch and not execute)
        right = Risc::Position.get(left) - 8
        right -= Risc::Position.get(self).at
        if( (right < 0) && ((opcode == :add) || (opcode == :sub)) )
          right *= -1   # this works as we never issue sub only add
          set_opcode :sub  # so (as we can't change the sign permanently) we can change the opcode
        end                         # and the sign even for sub (beucase we created them)
        raise "No negatives implemented #{self} #{right} " if right < 0
        return :pc , right
      else
        return @left , @right
      end
    end
def determine_operands
      if( @left.is_a?(Parfait::Object) or @left.is_a?(Risc::Label) or
        (@left.is_a?(Symbol) and !Risc::RegisterValue.look_like_reg(@left)))
        left = @left
        left = left.address if left.is_a?(Risc::Label)
        # do pc relative addressing with the difference to the instuction
        # 8 is for the funny pipeline adjustment (ie pointing to fetch and not execute)
        right = Risc::Position.get(left) - 8
        right -= Risc::Position.get(self).at
        if( (right < 0) && ((opcode == :add) || (opcode == :sub)) )
          right *= -1   # this works as we never issue sub only add
          set_opcode :sub  # so (as we can't change the sign permanently) we can change the opcode
        end                         # and the sign even for sub (beucase we created them)
        raise "No negatives implemented #{self} #{right} " if right < 0
        return :pc , right
      else
        return @left , @right
      end
    end
don't overwrite instance variables, to make assembly repeatable
 this also loads constants, which are issued as pc relative adds