346 void resolve_global_jobject(Register value, Register thread, Register tmp);
347
348 // C 'boolean' to Java boolean: x == 0 ? 0 : 1
349 void c2bool(Register x);
350
351 // C++ bool manipulation
352
353 void movbool(Register dst, Address src);
354 void movbool(Address dst, bool boolconst);
355 void movbool(Address dst, Register src);
356 void testbool(Register dst);
357
358 void resolve_oop_handle(Register result, Register tmp);
359 void resolve_weak_handle(Register result, Register tmp);
360 void load_mirror(Register mirror, Register method, Register tmp);
361 void load_method_holder_cld(Register rresult, Register rmethod);
362
363 void load_method_holder(Register holder, Register method);
364
365 // oop manipulations
366 void load_klass(Register dst, Register src, Register tmp);
367 void store_klass(Register dst, Register src, Register tmp);
368
369 void access_load_at(BasicType type, DecoratorSet decorators, Register dst, Address src,
370 Register tmp1, Register thread_tmp);
371 void access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register val,
372 Register tmp1, Register tmp2, Register tmp3);
373
374 void load_heap_oop(Register dst, Address src, Register tmp1 = noreg,
375 Register thread_tmp = noreg, DecoratorSet decorators = 0);
376 void load_heap_oop_not_null(Register dst, Address src, Register tmp1 = noreg,
377 Register thread_tmp = noreg, DecoratorSet decorators = 0);
378 void store_heap_oop(Address dst, Register val, Register tmp1 = noreg,
379 Register tmp2 = noreg, Register tmp3 = noreg, DecoratorSet decorators = 0);
380
381 // Used for storing null. All other oop constants should be
382 // stored using routines that take a jobject.
383 void store_heap_oop_null(Address dst);
384
385 #ifdef _LP64
386 void store_klass_gap(Register dst, Register src);
387
388 // This dummy is to prevent a call to store_heap_oop from
2131 void convert_f2i(Register dst, XMMRegister src);
2132 void convert_d2i(Register dst, XMMRegister src);
2133 void convert_f2l(Register dst, XMMRegister src);
2134 void convert_d2l(Register dst, XMMRegister src);
2135 void round_double(Register dst, XMMRegister src, Register rtmp, Register rcx);
2136 void round_float(Register dst, XMMRegister src, Register rtmp, Register rcx);
2137
2138 void cache_wb(Address line);
2139 void cache_wbsync(bool is_pre);
2140
2141 #ifdef COMPILER2_OR_JVMCI
2142 void generate_fill_avx3(BasicType type, Register to, Register value,
2143 Register count, Register rtmp, XMMRegister xtmp);
2144 #endif // COMPILER2_OR_JVMCI
2145 #endif // _LP64
2146
2147 void vallones(XMMRegister dst, int vector_len);
2148
2149 void check_stack_alignment(Register sp, const char* msg, unsigned bias = 0, Register tmp = noreg);
2150
2151 void lightweight_lock(Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2152 void lightweight_unlock(Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2153 };
2154
2155 /**
2156 * class SkipIfEqual:
2157 *
2158 * Instantiating this class will result in assembly code being output that will
2159 * jump around any code emitted between the creation of the instance and it's
2160 * automatic destruction at the end of a scope block, depending on the value of
2161 * the flag passed to the constructor, which will be checked at run-time.
2162 */
2163 class SkipIfEqual {
2164 private:
2165 MacroAssembler* _masm;
2166 Label _label;
2167
2168 public:
2169 SkipIfEqual(MacroAssembler*, const bool* flag_addr, bool value, Register rscratch);
2170 ~SkipIfEqual();
2171 };
|
346 void resolve_global_jobject(Register value, Register thread, Register tmp);
347
348 // C 'boolean' to Java boolean: x == 0 ? 0 : 1
349 void c2bool(Register x);
350
351 // C++ bool manipulation
352
353 void movbool(Register dst, Address src);
354 void movbool(Address dst, bool boolconst);
355 void movbool(Address dst, Register src);
356 void testbool(Register dst);
357
358 void resolve_oop_handle(Register result, Register tmp);
359 void resolve_weak_handle(Register result, Register tmp);
360 void load_mirror(Register mirror, Register method, Register tmp);
361 void load_method_holder_cld(Register rresult, Register rmethod);
362
363 void load_method_holder(Register holder, Register method);
364
365 // oop manipulations
366 #ifdef _LP64
367 void load_nklass_compact(Register dst, Register src);
368 #endif
369 void load_klass(Register dst, Register src, Register tmp);
370 void store_klass(Register dst, Register src, Register tmp);
371
372 // Compares the Klass pointer of an object to a given Klass (which might be narrow,
373 // depending on UseCompressedClassPointers).
374 void cmp_klass(Register klass, Register dst, Register tmp);
375
376 // Compares the Klass pointer of two objects o1 and o2. Result is in the condition flags.
377 // Uses tmp1 and tmp2 as temporary registers.
378 void cmp_klass(Register src, Register dst, Register tmp1, Register tmp2);
379
380 void access_load_at(BasicType type, DecoratorSet decorators, Register dst, Address src,
381 Register tmp1, Register thread_tmp);
382 void access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register val,
383 Register tmp1, Register tmp2, Register tmp3);
384
385 void load_heap_oop(Register dst, Address src, Register tmp1 = noreg,
386 Register thread_tmp = noreg, DecoratorSet decorators = 0);
387 void load_heap_oop_not_null(Register dst, Address src, Register tmp1 = noreg,
388 Register thread_tmp = noreg, DecoratorSet decorators = 0);
389 void store_heap_oop(Address dst, Register val, Register tmp1 = noreg,
390 Register tmp2 = noreg, Register tmp3 = noreg, DecoratorSet decorators = 0);
391
392 // Used for storing null. All other oop constants should be
393 // stored using routines that take a jobject.
394 void store_heap_oop_null(Address dst);
395
396 #ifdef _LP64
397 void store_klass_gap(Register dst, Register src);
398
399 // This dummy is to prevent a call to store_heap_oop from
2142 void convert_f2i(Register dst, XMMRegister src);
2143 void convert_d2i(Register dst, XMMRegister src);
2144 void convert_f2l(Register dst, XMMRegister src);
2145 void convert_d2l(Register dst, XMMRegister src);
2146 void round_double(Register dst, XMMRegister src, Register rtmp, Register rcx);
2147 void round_float(Register dst, XMMRegister src, Register rtmp, Register rcx);
2148
2149 void cache_wb(Address line);
2150 void cache_wbsync(bool is_pre);
2151
2152 #ifdef COMPILER2_OR_JVMCI
2153 void generate_fill_avx3(BasicType type, Register to, Register value,
2154 Register count, Register rtmp, XMMRegister xtmp);
2155 #endif // COMPILER2_OR_JVMCI
2156 #endif // _LP64
2157
2158 void vallones(XMMRegister dst, int vector_len);
2159
2160 void check_stack_alignment(Register sp, const char* msg, unsigned bias = 0, Register tmp = noreg);
2161
2162 void lightweight_lock(Register basic_lock, Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2163 void lightweight_unlock(Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2164 };
2165
2166 /**
2167 * class SkipIfEqual:
2168 *
2169 * Instantiating this class will result in assembly code being output that will
2170 * jump around any code emitted between the creation of the instance and it's
2171 * automatic destruction at the end of a scope block, depending on the value of
2172 * the flag passed to the constructor, which will be checked at run-time.
2173 */
2174 class SkipIfEqual {
2175 private:
2176 MacroAssembler* _masm;
2177 Label _label;
2178
2179 public:
2180 SkipIfEqual(MacroAssembler*, const bool* flag_addr, bool value, Register rscratch);
2181 ~SkipIfEqual();
2182 };
|