This commit is contained in:
Takashi Kokubun 2023-03-03 22:45:25 -08:00
Родитель 89f8e20aa4
Коммит f2ef352ee0
3 изменённых файлов: 24 добавлений и 3 удалений

Просмотреть файл

@ -24,7 +24,7 @@ module RubyVM::MJIT
asm.incr_counter(:mjit_insns_count)
asm.comment("Insn: #{insn.name}")
# 69/101
# 70/101
case insn.name
when :nop then nop(jit, ctx, asm)
when :getlocal then getlocal(jit, ctx, asm)
@ -79,7 +79,7 @@ module RubyVM::MJIT
when :send then send(jit, ctx, asm)
when :opt_send_without_block then opt_send_without_block(jit, ctx, asm)
when :objtostring then objtostring(jit, ctx, asm)
# opt_str_freeze
when :opt_str_freeze then opt_str_freeze(jit, ctx, asm)
when :opt_nil_p then opt_nil_p(jit, ctx, asm)
# opt_str_uminus
# opt_newarray_max
@ -1016,7 +1016,23 @@ module RubyVM::MJIT
end
end
# opt_str_freeze
# @param jit [RubyVM::MJIT::JITState]
# @param ctx [RubyVM::MJIT::Context]
# @param asm [RubyVM::MJIT::Assembler]
def opt_str_freeze(jit, ctx, asm)
unless Invariants.assume_bop_not_redefined(jit, C.STRING_REDEFINED_OP_FLAG, C.BOP_FREEZE)
return CantCompile;
end
str = jit.operand(0, ruby: true)
# Push the return value onto the stack
stack_ret = ctx.stack_push
asm.mov(:rax, to_value(str))
asm.mov(stack_ret, :rax)
KeepCompiling
end
# @param jit [RubyVM::MJIT::JITState]
# @param ctx [RubyVM::MJIT::Context]

Просмотреть файл

@ -547,6 +547,10 @@ module RubyVM::MJIT # :nodoc: all
Primitive.cexpr! %q{ UINT2NUM(BOP_EQ) }
end
def C.BOP_FREEZE
Primitive.cexpr! %q{ UINT2NUM(BOP_FREEZE) }
end
def C.BOP_GE
Primitive.cexpr! %q{ UINT2NUM(BOP_GE) }
end

Просмотреть файл

@ -365,6 +365,7 @@ generator = BindingGenerator.new(
BOP_MOD
BOP_OR
BOP_PLUS
BOP_FREEZE
ARRAY_REDEFINED_OP_FLAG
HASH_REDEFINED_OP_FLAG
INTEGER_REDEFINED_OP_FLAG