| 207 | #if 1 // Inline read barrier impl |
| 208 | |
| 209 | void JitCompiler::EmitReadBarrier() |
| 210 | { |
| 211 | auto isnull = cc.newLabel(); |
| 212 | cc.test(regA[A], regA[A]); |
| 213 | cc.je(isnull); |
| 214 | |
| 215 | auto mask = newTempIntPtr(); |
| 216 | cc.mov(mask.r32(), asmjit::x86::dword_ptr(regA[A], myoffsetof(DObject, ObjectFlags))); |
| 217 | cc.shl(mask, 63 - 5); // put OF_EuthanizeMe (1 << 5) in the highest bit |
| 218 | cc.sar(mask, 63); // sign extend so all bits are set if OF_EuthanizeMe was set |
| 219 | cc.not_(mask); |
| 220 | cc.and_(regA[A], mask); |
| 221 | |
| 222 | cc.bind(isnull); |
| 223 | } |
| 224 | |
| 225 | void JitCompiler::EmitLO() |
| 226 | { |