< prev index next >

src/cpu/aarch64/vm/macroAssembler_aarch64.cpp

Print this page

        

*** 39,48 **** --- 39,49 ---- #include "opto/node.hpp" #include "runtime/biasedLocking.hpp" #include "runtime/icache.hpp" #include "runtime/interfaceSupport.hpp" #include "runtime/sharedRuntime.hpp" + #include "runtime/thread.hpp" #if INCLUDE_ALL_GCS #include "gc/g1/g1CollectedHeap.inline.hpp" #include "gc/g1/g1SATBCardTableModRefBS.hpp" #include "gc/g1/heapRegion.hpp"
*** 4647,4651 **** --- 4648,4673 ---- br(GT, NEXT_1); BIND(DONE); sub(result, result, len); // Return index where we stopped } + + // get_thread can be called anywhere inside generated code so we need + // to save whatever non-callee save context might get clobbered by the + // call to Thread::current or, indeed, the call setup code. + // x86 appears to save C arg registers. + + void MacroAssembler::get_thread(Register dst) { + + // Save all call-clobbered regs except dst, plus r19 and r20. + RegSet saved_regs = RegSet::range(r0, r20) + lr - dst; + push(saved_regs, sp); + + // FIX-ME: implement + // return Thread::current() + + if (dst != c_rarg0) { + mov(dst, c_rarg0); + } + // restore pushed registers + pop(saved_regs, sp); + }
< prev index next >