summaryrefslogtreecommitdiff
path: root/lib/ruby_vm/rjit/insn_compiler.rb
diff options
context:
space:
mode:
authorTakashi Kokubun <[email protected]>2023-03-18 23:33:10 -0700
committerTakashi Kokubun <[email protected]>2023-03-18 23:35:42 -0700
commit32e0c97dfaa7973032e6ab93260be8eb4ad1458a (patch)
tree267a6f988cd4d3f1922f1a27c65114bbfd4c82e5 /lib/ruby_vm/rjit/insn_compiler.rb
parent106cca5111981ce30bb6f4534ff72e8c09ace162 (diff)
RJIT: Optimize String#bytesize
Diffstat (limited to 'lib/ruby_vm/rjit/insn_compiler.rb')
-rw-r--r--lib/ruby_vm/rjit/insn_compiler.rb18
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)