diff options
author | Takashi Kokubun <[email protected]> | 2023-03-18 23:33:10 -0700 |
---|---|---|
committer | Takashi Kokubun <[email protected]> | 2023-03-18 23:35:42 -0700 |
commit | 32e0c97dfaa7973032e6ab93260be8eb4ad1458a (patch) | |
tree | 267a6f988cd4d3f1922f1a27c65114bbfd4c82e5 /lib/ruby_vm/rjit/insn_compiler.rb | |
parent | 106cca5111981ce30bb6f4534ff72e8c09ace162 (diff) |
RJIT: Optimize String#bytesize
Diffstat (limited to 'lib/ruby_vm/rjit/insn_compiler.rb')
-rw-r--r-- | lib/ruby_vm/rjit/insn_compiler.rb | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/lib/ruby_vm/rjit/insn_compiler.rb b/lib/ruby_vm/rjit/insn_compiler.rb index aa37388a5b..bbfc8c3d0a 100644 --- a/lib/ruby_vm/rjit/insn_compiler.rb +++ b/lib/ruby_vm/rjit/insn_compiler.rb @@ -2769,6 +2769,22 @@ module RubyVM::RJIT # @param jit [RubyVM::RJIT::JITState] # @param ctx [RubyVM::RJIT::Context] # @param asm [RubyVM::RJIT::Assembler] + def jit_rb_str_bytesize(jit, ctx, asm, argc, known_recv_class) + asm.comment('String#bytesize') + + recv = ctx.stack_pop(1) + asm.mov(C_ARGS[0], recv) + asm.call(C.rb_str_bytesize) + + out_opnd = ctx.stack_push + asm.mov(out_opnd, C_RET) + + true + end + + # @param jit [RubyVM::RJIT::JITState] + # @param ctx [RubyVM::RJIT::Context] + # @param asm [RubyVM::RJIT::Assembler] def jit_rb_str_getbyte(jit, ctx, asm, argc, _known_recv_class) return false if argc != 1 asm.comment('rb_str_getbyte') @@ -2852,7 +2868,7 @@ module RubyVM::RJIT register_cfunc_method(String, :empty?, :jit_rb_str_empty_p) register_cfunc_method(String, :to_s, :jit_rb_str_to_s) register_cfunc_method(String, :to_str, :jit_rb_str_to_s) - #register_cfunc_method(String, :bytesize, :jit_rb_str_bytesize) + register_cfunc_method(String, :bytesize, :jit_rb_str_bytesize) #register_cfunc_method(String, :<<, :jit_rb_str_concat) #register_cfunc_method(String, :+@, :jit_rb_str_uplus) |