2041 sve_and(vtmp, T, min_jlong);
2042 sve_orr(vtmp, T, jlong_cast(1.0));
2043 break;
2044 default:
2045 assert(false, "unsupported");
2046 ShouldNotReachHere();
2047 }
2048 sve_sel(dst, T, pgtmp, vtmp, src); // Select either from src or vtmp based on the predicate register pgtmp
2049 // Result in dst
2050 }
2051
2052 bool C2_MacroAssembler::in_scratch_emit_size() {
2053 if (ciEnv::current()->task() != nullptr) {
2054 PhaseOutput* phase_output = Compile::current()->output();
2055 if (phase_output != nullptr && phase_output->in_scratch_emit_size()) {
2056 return true;
2057 }
2058 }
2059 return MacroAssembler::in_scratch_emit_size();
2060 }
|
2041 sve_and(vtmp, T, min_jlong);
2042 sve_orr(vtmp, T, jlong_cast(1.0));
2043 break;
2044 default:
2045 assert(false, "unsupported");
2046 ShouldNotReachHere();
2047 }
2048 sve_sel(dst, T, pgtmp, vtmp, src); // Select either from src or vtmp based on the predicate register pgtmp
2049 // Result in dst
2050 }
2051
2052 bool C2_MacroAssembler::in_scratch_emit_size() {
2053 if (ciEnv::current()->task() != nullptr) {
2054 PhaseOutput* phase_output = Compile::current()->output();
2055 if (phase_output != nullptr && phase_output->in_scratch_emit_size()) {
2056 return true;
2057 }
2058 }
2059 return MacroAssembler::in_scratch_emit_size();
2060 }
2061
2062 void C2_MacroAssembler::load_nklass_compact(Register dst, Register obj) {
2063 C2LoadNKlassStub* stub = new (Compile::current()->comp_arena()) C2LoadNKlassStub(dst);
2064 Compile::current()->output()->add_stub(stub);
2065 ldr(dst, Address(obj, oopDesc::mark_offset_in_bytes()));
2066 // NOTE: We can't use tbnz here, because the target is sometimes too far away
2067 // and cannot be encoded.
2068 tst(dst, markWord::monitor_value);
2069 br(Assembler::NE, stub->entry());
2070 bind(stub->continuation());
2071 lsr(dst, dst, markWord::klass_shift);
2072 }
|