Lines Matching refs:reg

150   constexpr explicit LiftoffRegister(Register reg)
151 : LiftoffRegister(reg.code()) {
152 DCHECK(kLiftoffAssemblerGpCacheRegs.has(reg));
153 DCHECK_EQ(reg, gp());
155 constexpr explicit LiftoffRegister(DoubleRegister reg)
156 : LiftoffRegister(kAfterMaxLiftoffGpRegCode + reg.code()) {
157 DCHECK(kLiftoffAssemblerFpCacheRegs.has(reg));
158 DCHECK_EQ(reg, fp());
162 LiftoffRegister reg{static_cast<storage_t>(code)};
164 // reg-class-specific constructor.
166 (reg.is_gp() && code == LiftoffRegister{reg.gp()}.liftoff_code()) ||
167 (reg.is_fp() && code == LiftoffRegister{reg.fp()}.liftoff_code()) ||
168 (reg.is_gp_pair() &&
169 code == ForPair(reg.low_gp(), reg.high_gp()).liftoff_code()) ||
170 (reg.is_fp_pair() && code == ForFpPair(reg.low_fp()).liftoff_code()));
171 return reg;
317 inline std::ostream& operator<<(std::ostream& os, LiftoffRegister reg) {
318 if (reg.is_gp_pair()) {
319 return os << "<" << reg.low_gp() << "+" << reg.high_gp() << ">";
320 } else if (reg.is_fp_pair()) {
321 return os << "<" << reg.low_fp() << "+" << reg.high_fp() << ">";
322 } else if (reg.is_gp()) {
323 return os << reg.gp();
325 return os << reg.fp();
361 constexpr Register set(Register reg) {
362 return set(LiftoffRegister(reg)).gp();
364 constexpr DoubleRegister set(DoubleRegister reg) {
365 return set(LiftoffRegister(reg)).fp();
368 constexpr LiftoffRegister set(LiftoffRegister reg) {
369 if (reg.is_pair()) {
370 regs_ |= storage_t{1} << reg.low().liftoff_code();
371 regs_ |= storage_t{1} << reg.high().liftoff_code();
373 regs_ |= storage_t{1} << reg.liftoff_code();
375 return reg;
378 constexpr LiftoffRegister clear(LiftoffRegister reg) {
379 if (reg.is_pair()) {
380 regs_ &= ~(storage_t{1} << reg.low().liftoff_code());
381 regs_ &= ~(storage_t{1} << reg.high().liftoff_code());
383 regs_ &= ~(storage_t{1} << reg.liftoff_code());
385 return reg;
387 constexpr Register clear(Register reg) {
388 return clear(LiftoffRegister{reg}).gp();
390 constexpr DoubleRegister clear(DoubleRegister reg) {
391 return clear(LiftoffRegister{reg}).fp();
394 bool has(LiftoffRegister reg) const {
395 if (reg.is_pair()) {
396 DCHECK_EQ(has(reg.low()), has(reg.high()));
397 reg = reg.low();
399 return (regs_ & (storage_t{1} << reg.liftoff_code())) != 0;
401 bool has(Register reg) const { return has(LiftoffRegister{reg}); }
402 bool has(DoubleRegister reg) const { return has(LiftoffRegister{reg}); }
419 // And regs_ with a right shifted version of itself, so reg[i] is set only
420 // if reg[i+1] is set. We only care about the even fp registers.
450 // Masking out is guaranteed to return a correct reg list, hence no checks
471 static_assert(bits == (bits & (kGpMask | kFpMask)), "illegal reg list");
519 LiftoffRegister reg = reglist.GetFirstRegSet();
520 reglist.clear(reg);
521 os << (first ? "" : ", ") << reg;