ruby-changes:68752
From: Maxime <ko1@a...>
Date: Thu, 21 Oct 2021 08:13:25 +0900 (JST)
Subject: [ruby-changes:68752] 05d36f31ca (master): Fix bug in putobject found by @tenderlove
https://git.ruby-lang.org/ruby.git/commit/?id=05d36f31ca From 05d36f31ca919a2cc1c2db210dd70639457dca35 Mon Sep 17 00:00:00 2001 From: Maxime Chevalier-Boisvert <maxime.chevalierboisvert@s...> Date: Wed, 10 Feb 2021 23:09:44 -0500 Subject: Fix bug in putobject found by @tenderlove --- ujit_codegen.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/ujit_codegen.c b/ujit_codegen.c index ee47f49af6..ba215dc008 100644 --- a/ujit_codegen.c +++ b/ujit_codegen.c @@ -292,7 +292,19 @@ gen_putobject(jitstate_t* jit, ctx_t* ctx) https://github.com/ruby/ruby/blob/trunk/ujit_codegen.c#L292 { // Keep track of the fixnum type tag x86opnd_t stack_top = ctx_stack_push(ctx, T_FIXNUM); - mov(cb, stack_top, imm_opnd((int64_t)arg)); + + x86opnd_t imm = imm_opnd((int64_t)arg); + + // 64-bit immediates can't be directly written to memory + if (imm.num_bits <= 32) + { + mov(cb, stack_top, imm); + } + else + { + mov(cb, REG0, imm); + mov(cb, stack_top, REG0); + } } else if (arg == Qtrue || arg == Qfalse) { -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/