rubyx/lib/slot_machine/macro/operator.rb
Torsten 7232c28ecd operator also fell into ssa trap
relying on register identity
in fact the whole operator concept was geared towards this, using 2 regs instead of one to avoid the whole issue
better now
2020-03-22 14:31:43 +02:00

24 lines
682 B
Ruby

module SlotMachine
class IntOperator < Macro
attr_reader :operator
def initialize(name , operator)
super(name)
@operator = operator.value
end
def to_risc(compiler)
builder = compiler.builder(compiler.source)
integer_tmp = builder.allocate_int
operator = @operator # make accessible in block
builder.build do
integer = message[:receiver].reduce_int(false)
integer_reg = message[:arg1].reduce_int(false)
result = integer.op operator , integer_reg
integer_tmp[Parfait::Integer.integer_index] << result
message[:return_value] << integer_tmp
end
return compiler
end
end
end