59 void force_set_reg(AsmReg reg) { this->reg = reg; }
62template <IRAdaptor Adaptor,
typename Derived, CompilerConfig Config>
65 this->compiler = other.compiler;
66 this->reg = other.reg;
67 other.reg = AsmReg::make_invalid();
70template <IRAdaptor Adaptor,
typename Derived, CompilerConfig Config>
71typename CompilerBase<Adaptor, Derived, Config>::ScratchReg &
72 CompilerBase<Adaptor, Derived, Config>::ScratchReg::operator=(
79 this->compiler = other.compiler;
80 this->reg = other.reg;
81 other.reg = AsmReg::make_invalid();
85template <IRAdaptor Adaptor,
typename Derived, CompilerConfig Config>
89 assert(compiler->may_change_value_state());
90 assert(!compiler->register_file.is_fixed(reg));
93 if (compiler->register_file.is_used(reg)) {
94 compiler->evict_reg(reg);
97 compiler->register_file.mark_used(reg, INVALID_VAL_LOCAL_IDX, 0);
98 compiler->register_file.mark_clobbered(reg);
99 compiler->register_file.mark_fixed(reg);
104template <IRAdaptor Adaptor,
typename Derived, CompilerConfig Config>
105CompilerBase<Adaptor, Derived, Config>::AsmReg
107 assert(compiler->may_change_value_state());
109 auto ®_file = compiler->register_file;
110 if (!reg.invalid()) {
111 assert(bank == reg_file.reg_bank(reg));
115 reg = compiler->select_reg(bank);
116 reg_file.mark_used(reg, INVALID_VAL_LOCAL_IDX, 0);
117 reg_file.mark_clobbered(reg);
118 reg_file.mark_fixed(reg);
122template <IRAdaptor Adaptor,
typename Derived, CompilerConfig Config>
128 compiler->register_file.unmark_fixed(reg);
129 compiler->register_file.unmark_used(reg);
130 reg = AsmReg::make_invalid();