[前][次][番号順一覧][スレッド一覧]

ruby-changes:73701

From: Takashi <ko1@a...>
Date: Fri, 23 Sep 2022 06:45:13 +0900 (JST)
Subject: [ruby-changes:73701] 4c6e1556b1 (master): Bindgen immediate types with builtin

https://git.ruby-lang.org/ruby.git/commit/?id=4c6e1556b1

From 4c6e1556b109367f598e276f72feacefc72805fc Mon Sep 17 00:00:00 2001
From: Takashi Kokubun <takashikkbn@g...>
Date: Tue, 20 Sep 2022 23:23:50 +0900
Subject: Bindgen immediate types with builtin

---
 lib/mjit/c_type.rb   |  16 +++++++-
 mjit_c.rb            | 111 ++++++++++++++++++++++++++-------------------------
 mjit_compiler.c      |   3 ++
 tool/mjit/bindgen.rb |  30 +++++++++++---
 4 files changed, 99 insertions(+), 61 deletions(-)

diff --git a/lib/mjit/c_type.rb b/lib/mjit/c_type.rb
index be93b36e90..8ccdfcc4d3 100644
--- a/lib/mjit/c_type.rb
+++ b/lib/mjit/c_type.rb
@@ -27,7 +27,7 @@ module RubyVM::MJIT https://github.com/ruby/ruby/blob/trunk/lib/mjit/c_type.rb#L27
     end
 
     module Immediate
-      # @param fiddle_type [Integer] Fiddle::TYPE_*
+      # @param fiddle_type [Integer]
       def self.new(fiddle_type)
         name = Fiddle.constants.find do |const|
           const.start_with?('TYPE_') && Fiddle.const_get(const) == fiddle_type.abs
@@ -40,6 +40,20 @@ module RubyVM::MJIT https://github.com/ruby/ruby/blob/trunk/lib/mjit/c_type.rb#L40
           CPointer::Immediate.define(fiddle_type)
         end
       end
+
+      # @param type [String]
+      def self.parse(ctype)
+        new(Fiddle::Importer.parse_ctype(ctype))
+      end
+
+      def self.find(size, unsigned)
+        fiddle_type = TYPE_MAP.fetch(size)
+        fiddle_type = -fiddle_type if unsigned
+        new(fiddle_type)
+      end
+
+      TYPE_MAP = Fiddle::PackInfo::SIZE_MAP.map { |type, size| [size, type.abs] }.to_h
+      private_constant :TYPE_MAP
     end
 
     module Bool
diff --git a/mjit_c.rb b/mjit_c.rb
index ec014ae7d0..67430c5b3d 100644
--- a/mjit_c.rb
+++ b/mjit_c.rb
@@ -1,3 +1,4 @@ https://github.com/ruby/ruby/blob/trunk/mjit_c.rb#L1
+# frozen_string_literal: true
 # Part of this file is generated by tool/mjit/bindgen.rb.
 # Run `make mjit-bindgen` to update code between "MJIT bindgen begin" and "MJIT bindgen end".
 module RubyVM::MJIT
@@ -175,14 +176,10 @@ module RubyVM::MJIT https://github.com/ruby/ruby/blob/trunk/mjit_c.rb#L176
     @RB_BUILTIN ||= self.rb_builtin_function
   end
 
-  def C.VALUE
-    @VALUE ||= CType::Immediate.new(-5)
-  end
-
   def C.compile_branch
     @compile_branch ||= CType::Struct.new(
       "compile_branch", 8,
-      stack_size: [0, CType::Immediate.new(-4)],
+      stack_size: [0, CType::Immediate.parse("unsigned int")],
       finish_p: [32, self._Bool],
     )
   end
@@ -191,16 +188,16 @@ module RubyVM::MJIT https://github.com/ruby/ruby/blob/trunk/mjit_c.rb#L188
     @compile_status ||= CType::Struct.new(
       "compile_status", 120,
       success: [0, self._Bool],
-      stack_size_for_pos: [64, CType::Pointer.new { CType::Immediate.new(4) }],
+      stack_size_for_pos: [64, CType::Pointer.new { CType::Immediate.parse("int") }],
       local_stack_p: [128, self._Bool],
       is_entries: [192, CType::Pointer.new { self.iseq_inline_storage_entry }],
-      cc_entries_index: [256, CType::Immediate.new(4)],
+      cc_entries_index: [256, CType::Immediate.parse("int")],
       compiled_iseq: [320, CType::Pointer.new { self.rb_iseq_constant_body }],
-      compiled_id: [384, CType::Immediate.new(4)],
+      compiled_id: [384, CType::Immediate.parse("int")],
       compile_info: [448, CType::Pointer.new { self.rb_mjit_compile_info }],
       merge_ivar_guards_p: [512, self._Bool],
       ivar_serial: [576, self.rb_serial_t],
-      max_ivar_index: [640, CType::Immediate.new(-5)],
+      max_ivar_index: [640, CType::Immediate.parse("size_t")],
       inlined_iseqs: [704, CType::Pointer.new { CType::Pointer.new { self.rb_iseq_constant_body } }],
       inline_context: [768, self.inlined_call_context],
     )
@@ -209,10 +206,10 @@ module RubyVM::MJIT https://github.com/ruby/ruby/blob/trunk/mjit_c.rb#L206
   def C.inlined_call_context
     @inlined_call_context ||= CType::Struct.new(
       "inlined_call_context", 24,
-      orig_argc: [0, CType::Immediate.new(4)],
+      orig_argc: [0, CType::Immediate.parse("int")],
       me: [64, self.VALUE],
-      param_size: [128, CType::Immediate.new(4)],
-      local_size: [160, CType::Immediate.new(4)],
+      param_size: [128, CType::Immediate.parse("int")],
+      local_size: [160, CType::Immediate.parse("int")],
     )
   end
 
@@ -262,11 +259,11 @@ module RubyVM::MJIT https://github.com/ruby/ruby/blob/trunk/mjit_c.rb#L259
       save_temps: [8, self._Bool],
       warnings: [16, self._Bool],
       debug: [24, self._Bool],
-      debug_flags: [64, CType::Pointer.new { CType::Immediate.new(2) }],
+      debug_flags: [64, CType::Pointer.new { CType::Immediate.parse("char") }],
       wait: [128, self._Bool],
-      min_calls: [160, CType::Immediate.new(-4)],
-      verbose: [192, CType::Immediate.new(4)],
-      max_cache_size: [224, CType::Immediate.new(4)],
+      min_calls: [160, CType::Immediate.parse("unsigned int")],
+      verbose: [192, CType::Immediate.parse("int")],
+      max_cache_size: [224, CType::Immediate.parse("int")],
       pause: [256, self._Bool],
       custom: [264, self._Bool],
     )
@@ -275,11 +272,11 @@ module RubyVM::MJIT https://github.com/ruby/ruby/blob/trunk/mjit_c.rb#L272
   def C.rb_builtin_function
     @rb_builtin_function ||= CType::Struct.new(
       "rb_builtin_function", 32,
-      func_ptr: [0, CType::Pointer.new { CType::Immediate.new(0) }],
-      argc: [64, CType::Immediate.new(4)],
-      index: [96, CType::Immediate.new(4)],
-      name: [128, CType::Pointer.new { CType::Immediate.new(2) }],
-      compiler: [192, CType::Immediate.new(1)],
+      func_ptr: [0, CType::Pointer.new { CType::Immediate.parse("void") }],
+      argc: [64, CType::Immediate.parse("int")],
+      index: [96, CType::Immediate.parse("int")],
+      name: [128, CType::Pointer.new { CType::Immediate.parse("char") }],
+      compiler: [192, CType::Immediate.parse("void *")],
     )
   end
 
@@ -311,7 +308,7 @@ module RubyVM::MJIT https://github.com/ruby/ruby/blob/trunk/mjit_c.rb#L308
       call_: [192, self.vm_call_handler],
       aux_: [256, CType::Union.new(
         "", 8,
-        attr_index: CType::Immediate.new(-4),
+        attr_index: CType::Immediate.parse("unsigned int"),
         method_missing_reason: self.method_missing_reason,
         v: self.VALUE,
       )],
@@ -337,9 +334,9 @@ module RubyVM::MJIT https://github.com/ruby/ruby/blob/trunk/mjit_c.rb#L334
       iseq: [128, CType::Pointer.new { self.rb_iseq_t }],
       self: [192, self.VALUE],
       ep: [256, CType::Pointer.new { self.VALUE }],
-      block_code: [320, CType::Pointer.new { CType::Immediate.new(0) }],
+      block_code: [320, CType::Pointer.new { CType::Immediate.parse("void") }],
       __bp__: [384, CType::Pointer.new { self.VALUE }],
-      jit_return: [448, CType::Pointer.new { CType::Immediate.new(0) }],
+      jit_return: [448, CType::Pointer.new { CType::Immediate.parse("void") }],
     )
   end
 
@@ -358,7 +355,7 @@ module RubyVM::MJIT https://github.com/ruby/ruby/blob/trunk/mjit_c.rb#L355
     @rb_execution_context_struct ||= CType::Struct.new(
       "rb_execution_context_struct", 1,
       vm_stack: [-1, CType::Pointer.new { self.VALUE }],
-      vm_stack_size: [-1, CType::Immediate.new(-5)],
+      vm_stack_size: [-1, CType::Immediate.parse("size_t")],
       cfp: [-1, CType::Pointer.new { self.rb_control_frame_t }],
       tag: [-1, CType::Pointer.new { self.rb_vm_tag }],
       interrupt_flag: [-1, self.rb_atomic_t],
@@ -374,15 +371,15 @@ module RubyVM::MJIT https://github.com/ruby/ruby/blob/trunk/mjit_c.rb#L371
       trace_arg: [-1, CType::Pointer.new { self.rb_trace_arg_struct }],
       errinfo: [-1, self.VALUE],
       passed_block_handler: [-1, self.VALUE],
-      raised_flag: [-1, CType::Immediate.new(-2)],
+      raised_flag: [-1, CType::Immediate.parse("uint8_t")],
       method_missing_reason: [-1, self.method_missing_reason],
       private_const_reference: [-1, self.VALUE],
       machine: [-1, CType::Struct.new(
         "", 1,
         stack_start: [-1, CType::Pointer.new { self.VALUE }],
         stack_end: [-1, CType::Pointer.new { self.VALUE }],
-        stack_maxsize: [-1, CType::Immediate.new(-5)],
-        regs: [-1, CType::Immediate.new(4)],
+        stack_maxsize: [-1, CType::Immediate.parse("size_t")],
+        regs: [-1, CType::Immediate.parse("int")],
       )],
     )
   end
@@ -395,7 +392,7 @@ module RubyVM::MJIT https://github.com/ruby/ruby/blob/trunk/mjit_c.rb#L392
     @rb_iseq_constant_body ||= CType::Struct.new(
       "rb_iseq_constant_body", 336,
       type: [0, self.rb_iseq_type],
-      iseq_size: [32, CType::Immediate.new(-4)],
+      iseq_size: [32, CType::Immediate.parse("unsigned int")],
       iseq_encoded: [64, CType::Pointer.new { self.VALUE }],
       param: [128, CType::Struct.new(
         "", 48,
@@ -412,13 +409,13 @@ module RubyVM::MJIT https://github.com/ruby/ruby/blob/trunk/mjit_c.rb#L409
           accepts_no_kwarg: [8, CType::BitField.new(1, 0)],
           ruby2_keywords: [9, CType::BitField.new(1, 1)],
         )],
-        size: [32, CType::Immediate.new(-4)],
-        lead_num: [64, CType::Immediate.new(4)],
-        opt_num: [96, CType::Immediate.new(4)],
-        rest_start: [128, CType::Immediate.new(4)],
-        post_start: [160, CType::Immediate.new(4)],
-        post_num: [192, CType::Immediate.new(4)],
-        block_start: [224, CType::Immediate.new(4)],
+        size: [32, CType::Immediate.parse("unsigned int")],
+        lead_num: [64, CType::Immediate.parse("int")],
+        opt_num: [96, CType::Immediate.parse("int")],
+        rest_start: [128, CType::Immediate.parse("int")],
+        post_start: [160, CType::Immediate.parse("int")],
+        post_num: [192, CType::Immediate.parse("int")],
+        block_start: [224, CType::Immediate.parse("int")],
         opt_table: [256, CType::Pointer.new { self.VALUE }],
         keyword: [320, CType::Pointer.new { self.rb_iseq_param_keyword }],
       )],
@@ -438,13 +435,13 @@ module RubyVM::MJIT https://githu (... truncated)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]