зеркало из https://github.com/github/ruby.git
YJIT: Avoid a register spill on arm64 (#9014)
This commit is contained in:
Родитель
5672fb63d2
Коммит
926bfc3bc0
|
@ -4244,3 +4244,10 @@ assert_equal 'true', %q{
|
|||
def entry = yield
|
||||
entry { true }
|
||||
}
|
||||
|
||||
assert_normal_exit %q{
|
||||
ivars = 1024.times.map { |i| "@iv_#{i} = #{i}\n" }.join
|
||||
Foo = Class.new
|
||||
Foo.class_eval "def initialize() #{ivars} end"
|
||||
Foo.new
|
||||
}
|
||||
|
|
|
@ -564,6 +564,7 @@ impl Assembler
|
|||
// If we're attempting to load into a memory operand, then
|
||||
// we'll switch over to the store instruction.
|
||||
(Opnd::Mem(_), _) => {
|
||||
let opnd0 = split_memory_address(asm, *dest);
|
||||
let value = match *src {
|
||||
// If the first operand is zero, then we can just use
|
||||
// the zero register.
|
||||
|
@ -579,7 +580,6 @@ impl Assembler
|
|||
_ => split_bitmask_immediate(asm, *src, dest.rm_num_bits())
|
||||
};
|
||||
|
||||
let opnd0 = split_memory_address(asm, *dest);
|
||||
asm.store(opnd0, value);
|
||||
},
|
||||
// If we're loading a memory operand into a register, then
|
||||
|
|
Загрузка…
Ссылка в новой задаче