From 632beec01f6a293aa03da06f5f0e6f9a7c22a8c5 Mon Sep 17 00:00:00 2001 From: Mau Magnaguagno Date: Sat, 17 Dec 2022 18:06:50 -0300 Subject: [PATCH] MJIT: Refactor BitField dereference byte and bitmask (#6955) Prefer Array#unpack1 and Enumerable#sum. I think the bitmask formula ``2 ** @width - 1`` would be clearer, but not faster for such small integers. --- lib/mjit/c_pointer.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mjit/c_pointer.rb b/lib/mjit/c_pointer.rb index aadf80e804..ee0be54a3c 100644 --- a/lib/mjit/c_pointer.rb +++ b/lib/mjit/c_pointer.rb @@ -282,12 +282,12 @@ module RubyVM::MJIT # Dereference def * - byte = Fiddle::Pointer.new(@addr)[0, Fiddle::SIZEOF_CHAR].unpack('c').first + byte = Fiddle::Pointer.new(@addr)[0, Fiddle::SIZEOF_CHAR].unpack1('c') if @width == 1 bit = (1 & (byte >> @offset)) bit == 1 elsif @width <= 8 && @offset == 0 - bitmask = @width.times.map { |i| 1 << i }.sum + bitmask = @width.times.sum { |i| 1 << i } byte & bitmask else raise NotImplementedError.new("not-implemented bit field access: width=#{@width} offset=#{@offset}")