< prev index next >

src/hotspot/cpu/aarch64/interp_masm_aarch64.hpp

Print this page
*** 1,7 ***
  /*
!  * Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
   * Copyright (c) 2014, 2015, Red Hat Inc. All rights reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
--- 1,7 ---
  /*
!  * Copyright (c) 2003, 2021, Oracle and/or its affiliates. All rights reserved.
   * Copyright (c) 2014, 2015, Red Hat Inc. All rights reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as

*** 116,10 ***
--- 116,32 ---
    void get_cache_and_index_and_bytecode_at_bcp(Register cache, Register index, Register bytecode, int byte_no, int bcp_offset, size_t index_size = sizeof(u2));
    void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset, size_t index_size = sizeof(u2));
    void get_cache_index_at_bcp(Register index, int bcp_offset, size_t index_size = sizeof(u2));
    void get_method_counters(Register method, Register mcs, Label& skip);
  
+   // Kills t1 and t2, perserves klass, return allocation in new_obj
+   void allocate_instance(Register klass, Register new_obj,
+                          Register t1, Register t2,
+                          bool clear_fields, Label& alloc_failed);
+ 
+   // Allocate instance in "obj" and read in the content of the inline field
+   // NOTES:
+   //   - input holder object via "obj", which must be r0,
+   //     will return new instance via the same reg
+   //   - assumes holder_klass and valueKlass field klass have both been resolved
+   void read_inlined_field(Register holder_klass,
+                           Register field_index, Register field_offset,
+                           Register temp,  Register obj = r0);
+ 
+   // Allocate value buffer in "obj" and read in flattened element at the given index
+   // NOTES:
+   //   - Return via "obj" must be r0
+   //   - kills all given regs
+   void read_flattened_element(Register array, Register index,
+                               Register t1, Register t2,
+                               Register obj = r0);
+ 
    // load cpool->resolved_references(index);
    void load_resolved_reference_at_index(Register result, Register index, Register tmp = r5);
  
    // load cpool->resolved_klass_at(index);
    void load_resolved_klass_at_offset(Register cpool, Register index, Register klass, Register temp);

*** 161,11 ***
    void load_float(Address src);
    void load_double(Address src);
  
    // Generate a subtype check: branch to ok_is_subtype if sub_klass is
    // a subtype of super_klass.
!   void gen_subtype_check( Register sub_klass, Label &ok_is_subtype );
  
    // Dispatching
    void dispatch_prolog(TosState state, int step = 0);
    void dispatch_epilog(TosState state, int step = 0);
    // dispatch via rscratch1
--- 183,11 ---
    void load_float(Address src);
    void load_double(Address src);
  
    // Generate a subtype check: branch to ok_is_subtype if sub_klass is
    // a subtype of super_klass.
!   void gen_subtype_check( Register sub_klass, Label &ok_is_subtype, bool profile = true);
  
    // Dispatching
    void dispatch_prolog(TosState state, int step = 0);
    void dispatch_epilog(TosState state, int step = 0);
    // dispatch via rscratch1

*** 254,11 ***
  
    // narrow int return value
    void narrow(Register result);
  
    void profile_taken_branch(Register mdp, Register bumped_count);
!   void profile_not_taken_branch(Register mdp);
    void profile_call(Register mdp);
    void profile_final_call(Register mdp);
    void profile_virtual_call(Register receiver, Register mdp,
                              Register scratch2,
                              bool receiver_can_be_null = false);
--- 276,11 ---
  
    // narrow int return value
    void narrow(Register result);
  
    void profile_taken_branch(Register mdp, Register bumped_count);
!   void profile_not_taken_branch(Register mdp, bool acmp = false);
    void profile_call(Register mdp);
    void profile_final_call(Register mdp);
    void profile_virtual_call(Register receiver, Register mdp,
                              Register scratch2,
                              bool receiver_can_be_null = false);

*** 267,10 ***
--- 289,13 ---
    void profile_typecheck(Register mdp, Register klass, Register scratch);
    void profile_typecheck_failed(Register mdp);
    void profile_switch_default(Register mdp);
    void profile_switch_case(Register index_in_scratch, Register mdp,
                             Register scratch2);
+   void profile_array(Register mdp, Register array, Register tmp);
+   void profile_element(Register mdp, Register element, Register tmp);
+   void profile_acmp(Register mdp, Register left, Register right, Register tmp);
  
    void profile_obj_type(Register obj, const Address& mdo_addr);
    void profile_arguments_type(Register mdp, Register callee, Register tmp, bool is_virtual);
    void profile_return_type(Register mdp, Register ret, Register tmp);
    void profile_parameters_type(Register mdp, Register tmp1, Register tmp2);
< prev index next >