347 void resolve_global_jobject(Register value, Register thread, Register tmp);
348
349 // C 'boolean' to Java boolean: x == 0 ? 0 : 1
350 void c2bool(Register x);
351
352 // C++ bool manipulation
353
354 void movbool(Register dst, Address src);
355 void movbool(Address dst, bool boolconst);
356 void movbool(Address dst, Register src);
357 void testbool(Register dst);
358
359 void resolve_oop_handle(Register result, Register tmp);
360 void resolve_weak_handle(Register result, Register tmp);
361 void load_mirror(Register mirror, Register method, Register tmp);
362 void load_method_holder_cld(Register rresult, Register rmethod);
363
364 void load_method_holder(Register holder, Register method);
365
366 // oop manipulations
367 void load_klass(Register dst, Register src, Register tmp);
368 void store_klass(Register dst, Register src, Register tmp);
369
370 void access_load_at(BasicType type, DecoratorSet decorators, Register dst, Address src,
371 Register tmp1, Register thread_tmp);
372 void access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register val,
373 Register tmp1, Register tmp2, Register tmp3);
374
375 void load_heap_oop(Register dst, Address src, Register tmp1 = noreg,
376 Register thread_tmp = noreg, DecoratorSet decorators = 0);
377 void load_heap_oop_not_null(Register dst, Address src, Register tmp1 = noreg,
378 Register thread_tmp = noreg, DecoratorSet decorators = 0);
379 void store_heap_oop(Address dst, Register val, Register tmp1 = noreg,
380 Register tmp2 = noreg, Register tmp3 = noreg, DecoratorSet decorators = 0);
381
382 // Used for storing null. All other oop constants should be
383 // stored using routines that take a jobject.
384 void store_heap_oop_null(Address dst);
385
386 #ifdef _LP64
387 void store_klass_gap(Register dst, Register src);
388
389 // This dummy is to prevent a call to store_heap_oop from
2019 void convert_f2i(Register dst, XMMRegister src);
2020 void convert_d2i(Register dst, XMMRegister src);
2021 void convert_f2l(Register dst, XMMRegister src);
2022 void convert_d2l(Register dst, XMMRegister src);
2023 void round_double(Register dst, XMMRegister src, Register rtmp, Register rcx);
2024 void round_float(Register dst, XMMRegister src, Register rtmp, Register rcx);
2025
2026 void cache_wb(Address line);
2027 void cache_wbsync(bool is_pre);
2028
2029 #ifdef COMPILER2_OR_JVMCI
2030 void generate_fill_avx3(BasicType type, Register to, Register value,
2031 Register count, Register rtmp, XMMRegister xtmp);
2032 #endif // COMPILER2_OR_JVMCI
2033 #endif // _LP64
2034
2035 void vallones(XMMRegister dst, int vector_len);
2036
2037 void check_stack_alignment(Register sp, const char* msg, unsigned bias = 0, Register tmp = noreg);
2038
2039 void lightweight_lock(Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2040 void lightweight_unlock(Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2041 };
2042
2043 /**
2044 * class SkipIfEqual:
2045 *
2046 * Instantiating this class will result in assembly code being output that will
2047 * jump around any code emitted between the creation of the instance and it's
2048 * automatic destruction at the end of a scope block, depending on the value of
2049 * the flag passed to the constructor, which will be checked at run-time.
2050 */
2051 class SkipIfEqual {
2052 private:
2053 MacroAssembler* _masm;
2054 Label _label;
2055
2056 public:
2057 SkipIfEqual(MacroAssembler*, const bool* flag_addr, bool value, Register rscratch);
2058 ~SkipIfEqual();
2059 };
|
347 void resolve_global_jobject(Register value, Register thread, Register tmp);
348
349 // C 'boolean' to Java boolean: x == 0 ? 0 : 1
350 void c2bool(Register x);
351
352 // C++ bool manipulation
353
354 void movbool(Register dst, Address src);
355 void movbool(Address dst, bool boolconst);
356 void movbool(Address dst, Register src);
357 void testbool(Register dst);
358
359 void resolve_oop_handle(Register result, Register tmp);
360 void resolve_weak_handle(Register result, Register tmp);
361 void load_mirror(Register mirror, Register method, Register tmp);
362 void load_method_holder_cld(Register rresult, Register rmethod);
363
364 void load_method_holder(Register holder, Register method);
365
366 // oop manipulations
367 #ifdef _LP64
368 void load_nklass_compact(Register dst, Register src);
369 #endif
370 void load_klass(Register dst, Register src, Register tmp);
371 void store_klass(Register dst, Register src, Register tmp);
372
373 // Compares the Klass pointer of an object to a given Klass (which might be narrow,
374 // depending on UseCompressedClassPointers).
375 void cmp_klass(Register klass, Register dst, Register tmp);
376
377 // Compares the Klass pointer of two objects o1 and o2. Result is in the condition flags.
378 // Uses tmp1 and tmp2 as temporary registers.
379 void cmp_klass(Register src, Register dst, Register tmp1, Register tmp2);
380
381 void access_load_at(BasicType type, DecoratorSet decorators, Register dst, Address src,
382 Register tmp1, Register thread_tmp);
383 void access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register val,
384 Register tmp1, Register tmp2, Register tmp3);
385
386 void load_heap_oop(Register dst, Address src, Register tmp1 = noreg,
387 Register thread_tmp = noreg, DecoratorSet decorators = 0);
388 void load_heap_oop_not_null(Register dst, Address src, Register tmp1 = noreg,
389 Register thread_tmp = noreg, DecoratorSet decorators = 0);
390 void store_heap_oop(Address dst, Register val, Register tmp1 = noreg,
391 Register tmp2 = noreg, Register tmp3 = noreg, DecoratorSet decorators = 0);
392
393 // Used for storing null. All other oop constants should be
394 // stored using routines that take a jobject.
395 void store_heap_oop_null(Address dst);
396
397 #ifdef _LP64
398 void store_klass_gap(Register dst, Register src);
399
400 // This dummy is to prevent a call to store_heap_oop from
2030 void convert_f2i(Register dst, XMMRegister src);
2031 void convert_d2i(Register dst, XMMRegister src);
2032 void convert_f2l(Register dst, XMMRegister src);
2033 void convert_d2l(Register dst, XMMRegister src);
2034 void round_double(Register dst, XMMRegister src, Register rtmp, Register rcx);
2035 void round_float(Register dst, XMMRegister src, Register rtmp, Register rcx);
2036
2037 void cache_wb(Address line);
2038 void cache_wbsync(bool is_pre);
2039
2040 #ifdef COMPILER2_OR_JVMCI
2041 void generate_fill_avx3(BasicType type, Register to, Register value,
2042 Register count, Register rtmp, XMMRegister xtmp);
2043 #endif // COMPILER2_OR_JVMCI
2044 #endif // _LP64
2045
2046 void vallones(XMMRegister dst, int vector_len);
2047
2048 void check_stack_alignment(Register sp, const char* msg, unsigned bias = 0, Register tmp = noreg);
2049
2050 void lightweight_lock(Register basic_lock, Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2051 void lightweight_unlock(Register obj, Register reg_rax, Register thread, Register tmp, Label& slow);
2052 };
2053
2054 /**
2055 * class SkipIfEqual:
2056 *
2057 * Instantiating this class will result in assembly code being output that will
2058 * jump around any code emitted between the creation of the instance and it's
2059 * automatic destruction at the end of a scope block, depending on the value of
2060 * the flag passed to the constructor, which will be checked at run-time.
2061 */
2062 class SkipIfEqual {
2063 private:
2064 MacroAssembler* _masm;
2065 Label _label;
2066
2067 public:
2068 SkipIfEqual(MacroAssembler*, const bool* flag_addr, bool value, Register rscratch);
2069 ~SkipIfEqual();
2070 };
|