71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
# File 'lib/ytljit/vm_inline_method.rb', line 71
def gen_compare_operation(context, cinst, sinst,
tempreg, tempreg2, resreg)
context.start_using_reg(tempreg)
asm = context.assembler
asm.with_retry do
asm.mov(tempreg, context.ret_reg)
end
context.set_reg_content(tempreg, context.ret_node)
aele = @arguments[3]
context = aele.compile(context)
context.ret_node.type = nil
rtype = context.ret_node.decide_type_once(context.to_signature)
context = rtype.gen_unboxing(context)
asm = context.assembler
asm.with_retry do
if context.ret_reg != tempreg2 then
asm.mov(tempreg2, context.ret_reg)
end
asm.send(cinst, tempreg2, tempreg)
asm.send(sinst, resreg)
asm.add(resreg, resreg)
end
context.end_using_reg(tempreg)
context.ret_node = self
context.ret_reg = resreg
decide_type_once(context.to_signature)
if type.boxed then
context = type.gen_boxing(context)
end
context
end
|