aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMau Magnaguagno <maumagnaguagno@gmail.com>2022-12-17 18:06:50 -0300
committerGitHub <noreply@github.com>2022-12-17 13:06:50 -0800
commit632beec01f6a293aa03da06f5f0e6f9a7c22a8c5 (patch)
tree5b4b7eb418ccbb9047b1f00b0651f2fa55bdf73a
parent6e3bc6710324aeb75299c9edce305b6f7c22321c (diff)
downloadruby-632beec01f6a293aa03da06f5f0e6f9a7c22a8c5.tar.gz
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.
-rw-r--r--lib/mjit/c_pointer.rb4
1 files 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}")