Lines Matching defs:registers
50 // running Wasm, we can get away with saving half of those registers.
59 void TurboAssembler::PushCPURegList(CPURegList registers) {
62 DCHECK(!registers.IncludesAliasOf(lr));
64 int size = registers.RegisterSizeInBytes();
65 DCHECK_EQ(0, (size * registers.Count()) % 16);
67 // Push up to four registers at a time.
68 while (!registers.IsEmpty()) {
69 int count_before = registers.Count();
70 const CPURegister& src0 = registers.PopHighestIndex();
71 const CPURegister& src1 = registers.PopHighestIndex();
72 const CPURegister& src2 = registers.PopHighestIndex();
73 const CPURegister& src3 = registers.PopHighestIndex();
74 int count = count_before - registers.Count();
79 void TurboAssembler::PopCPURegList(CPURegList registers) {
80 int size = registers.RegisterSizeInBytes();
81 DCHECK_EQ(0, (size * registers.Count()) % 16);
85 DCHECK(!registers.IncludesAliasOf(lr));
87 // Pop up to four registers at a time.
88 while (!registers.IsEmpty()) {
89 int count_before = registers.Count();
90 const CPURegister& dst0 = registers.PopLowestIndex();
91 const CPURegister& dst1 = registers.PopLowestIndex();
92 const CPURegister& dst2 = registers.PopLowestIndex();
93 const CPURegister& dst3 = registers.PopLowestIndex();
94 int count = count_before - registers.Count();
383 // Otherwise, emit a register move only if the registers are distinct, or
384 // if they are not X registers.
388 // registers is not required to clear the top word of the X register. In
1180 // Ensure that we don't unintentially modify scratch or debug registers.
1186 // When pushing multiple registers, the store order is chosen such that
1203 // Skip over 4 * size, then fill in the gap. This allows four W registers
1217 // Ensure that we don't unintentially modify scratch or debug registers.
1223 // When popping multiple registers, the load order is chosen such that
1242 // registers to be popped using sp, whilst maintaining 16-byte alignment
1268 // Ensure that the macro-assembler doesn't use any scratch registers.
1302 // Ensure that the macro-assembler doesn't use any scratch registers.
1423 // TODO(all): large copies may benefit from using temporary Q registers
2590 // DoubleToI preserves any registers it needs to clobber.
2701 // Read the registers from the stack without popping them. The stack pointer
3169 void TurboAssembler::MaybeSaveRegisters(RegList registers) {
3170 if (registers.is_empty()) return;
3172 CPURegList regs(kXRegSizeInBits, registers);
3179 void TurboAssembler::MaybeRestoreRegisters(RegList registers) {
3180 if (registers.is_empty()) return;
3182 CPURegList regs(kXRegSizeInBits, registers);
3192 RegList registers = WriteBarrierDescriptor::ComputeSavedRegisters(object);
3193 MaybeSaveRegisters(registers);
3202 MaybeRestoreRegisters(registers);
3209 RegList registers = WriteBarrierDescriptor::ComputeSavedRegisters(object);
3210 MaybeSaveRegisters(registers);
3220 MaybeRestoreRegisters(registers);
3277 // We only have `dst_slot` and `dst_object` left as distinct registers so we
3380 // We need some scratch registers for the MacroAssembler, so make sure we have
3430 // The provided arguments, and their proper procedure-call standard registers.
3436 // The PCS varargs registers for printf. Note that x0 is used for the printf
3443 // We can use caller-saved registers as scratch values, except for the
3444 // arguments and the PCS registers where they might need to go.
3460 // Copies of the printf vararg registers that we can pop from.
3480 // In case of variadic functions SIMD and Floating-point registers
3604 // Printf is expected to preserve all registers, so make sure that none are
3605 // available as scratch registers until we've preserved them.
3614 // Preserve all caller-saved registers as well as NZCV.
3620 // We can use caller-saved registers as scratch values (except for argN).
3632 // caller-saved registers.