< prev index next >

src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp

Print this page

 847 
 848   void reset_last_Java_frame(Register thread);
 849 
 850   // thread in the default location (rthread)
 851   void reset_last_Java_frame(bool clear_fp);
 852 
 853   // Stores
 854   void store_check(Register obj);                // store check for obj - register is destroyed afterwards
 855   void store_check(Register obj, Address dst);   // same as above, dst is exact store location (reg. is destroyed)
 856 
 857   void resolve_jobject(Register value, Register tmp1, Register tmp2);
 858   void resolve_global_jobject(Register value, Register tmp1, Register tmp2);
 859 
 860   // C 'boolean' to Java boolean: x == 0 ? 0 : 1
 861   void c2bool(Register x);
 862 
 863   void load_method_holder_cld(Register rresult, Register rmethod);
 864   void load_method_holder(Register holder, Register method);
 865 
 866   // oop manipulations

 867   void load_klass(Register dst, Register src);
 868   void store_klass(Register dst, Register src);
 869   void cmp_klass(Register oop, Register trial_klass, Register tmp);

 870 
 871   void resolve_weak_handle(Register result, Register tmp1, Register tmp2);
 872   void resolve_oop_handle(Register result, Register tmp1, Register tmp2);
 873   void load_mirror(Register dst, Register method, Register tmp1, Register tmp2);
 874 
 875   void access_load_at(BasicType type, DecoratorSet decorators, Register dst, Address src,
 876                       Register tmp1, Register tmp2);
 877 
 878   void access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register val,
 879                        Register tmp1, Register tmp2, Register tmp3);
 880 
 881   void load_heap_oop(Register dst, Address src, Register tmp1,
 882                      Register tmp2, DecoratorSet decorators = 0);
 883 
 884   void load_heap_oop_not_null(Register dst, Address src, Register tmp1,
 885                               Register tmp2, DecoratorSet decorators = 0);
 886   void store_heap_oop(Address dst, Register val, Register tmp1,
 887                       Register tmp2, Register tmp3, DecoratorSet decorators = 0);
 888 
 889   // currently unimplemented

1585                                             int sve_vec_reg_size_in_bytes) {
1586     assert(sve_vec_reg_size_in_bytes % 16 == 0, "unexpected sve vector reg size");
1587     for (int i = 0; i < sve_vec_reg_size_in_bytes / 16; i++) {
1588       spill_copy128(src_offset, dst_offset);
1589       src_offset += 16;
1590       dst_offset += 16;
1591     }
1592   }
1593   void spill_copy_sve_predicate_stack_to_stack(int src_offset, int dst_offset,
1594                                                int sve_predicate_reg_size_in_bytes) {
1595     sve_ldr(ptrue, sve_spill_address(sve_predicate_reg_size_in_bytes, src_offset));
1596     sve_str(ptrue, sve_spill_address(sve_predicate_reg_size_in_bytes, dst_offset));
1597     reinitialize_ptrue();
1598   }
1599   void cache_wb(Address line);
1600   void cache_wbsync(bool is_pre);
1601 
1602   // Code for java.lang.Thread::onSpinWait() intrinsic.
1603   void spin_wait();
1604 
1605   void lightweight_lock(Register obj, Register t1, Register t2, Register t3, Label& slow);
1606   void lightweight_unlock(Register obj, Register t1, Register t2, Register t3, Label& slow);
1607 
1608 private:
1609   // Check the current thread doesn't need a cross modify fence.
1610   void verify_cross_modify_fence_not_required() PRODUCT_RETURN;
1611 
1612 };
1613 
1614 #ifdef ASSERT
1615 inline bool AbstractAssembler::pd_check_instruction_mark() { return false; }
1616 #endif
1617 
1618 /**
1619  * class SkipIfEqual:
1620  *
1621  * Instantiating this class will result in assembly code being output that will
1622  * jump around any code emitted between the creation of the instance and it's
1623  * automatic destruction at the end of a scope block, depending on the value of
1624  * the flag passed to the constructor, which will be checked at run-time.
1625  */

 847 
 848   void reset_last_Java_frame(Register thread);
 849 
 850   // thread in the default location (rthread)
 851   void reset_last_Java_frame(bool clear_fp);
 852 
 853   // Stores
 854   void store_check(Register obj);                // store check for obj - register is destroyed afterwards
 855   void store_check(Register obj, Address dst);   // same as above, dst is exact store location (reg. is destroyed)
 856 
 857   void resolve_jobject(Register value, Register tmp1, Register tmp2);
 858   void resolve_global_jobject(Register value, Register tmp1, Register tmp2);
 859 
 860   // C 'boolean' to Java boolean: x == 0 ? 0 : 1
 861   void c2bool(Register x);
 862 
 863   void load_method_holder_cld(Register rresult, Register rmethod);
 864   void load_method_holder(Register holder, Register method);
 865 
 866   // oop manipulations
 867   void load_nklass_compact(Register dst, Register src);
 868   void load_klass(Register dst, Register src);
 869   void store_klass(Register dst, Register src);
 870   void cmp_klass(Register oop, Register trial_klass, Register tmp);
 871   void cmp_klass(Register src, Register dst, Register tmp1, Register tmp2);
 872 
 873   void resolve_weak_handle(Register result, Register tmp1, Register tmp2);
 874   void resolve_oop_handle(Register result, Register tmp1, Register tmp2);
 875   void load_mirror(Register dst, Register method, Register tmp1, Register tmp2);
 876 
 877   void access_load_at(BasicType type, DecoratorSet decorators, Register dst, Address src,
 878                       Register tmp1, Register tmp2);
 879 
 880   void access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register val,
 881                        Register tmp1, Register tmp2, Register tmp3);
 882 
 883   void load_heap_oop(Register dst, Address src, Register tmp1,
 884                      Register tmp2, DecoratorSet decorators = 0);
 885 
 886   void load_heap_oop_not_null(Register dst, Address src, Register tmp1,
 887                               Register tmp2, DecoratorSet decorators = 0);
 888   void store_heap_oop(Address dst, Register val, Register tmp1,
 889                       Register tmp2, Register tmp3, DecoratorSet decorators = 0);
 890 
 891   // currently unimplemented

1587                                             int sve_vec_reg_size_in_bytes) {
1588     assert(sve_vec_reg_size_in_bytes % 16 == 0, "unexpected sve vector reg size");
1589     for (int i = 0; i < sve_vec_reg_size_in_bytes / 16; i++) {
1590       spill_copy128(src_offset, dst_offset);
1591       src_offset += 16;
1592       dst_offset += 16;
1593     }
1594   }
1595   void spill_copy_sve_predicate_stack_to_stack(int src_offset, int dst_offset,
1596                                                int sve_predicate_reg_size_in_bytes) {
1597     sve_ldr(ptrue, sve_spill_address(sve_predicate_reg_size_in_bytes, src_offset));
1598     sve_str(ptrue, sve_spill_address(sve_predicate_reg_size_in_bytes, dst_offset));
1599     reinitialize_ptrue();
1600   }
1601   void cache_wb(Address line);
1602   void cache_wbsync(bool is_pre);
1603 
1604   // Code for java.lang.Thread::onSpinWait() intrinsic.
1605   void spin_wait();
1606 
1607   void lightweight_lock(Register basic_lock, Register obj, Register t1, Register t2, Register t3, Label& slow);
1608   void lightweight_unlock(Register obj, Register t1, Register t2, Register t3, Label& slow);
1609 
1610 private:
1611   // Check the current thread doesn't need a cross modify fence.
1612   void verify_cross_modify_fence_not_required() PRODUCT_RETURN;
1613 
1614 };
1615 
1616 #ifdef ASSERT
1617 inline bool AbstractAssembler::pd_check_instruction_mark() { return false; }
1618 #endif
1619 
1620 /**
1621  * class SkipIfEqual:
1622  *
1623  * Instantiating this class will result in assembly code being output that will
1624  * jump around any code emitted between the creation of the instance and it's
1625  * automatic destruction at the end of a scope block, depending on the value of
1626  * the flag passed to the constructor, which will be checked at run-time.
1627  */
< prev index next >