< prev index next >

src/cpu/s390/vm/interp_masm_s390.hpp

Print this page
   1 /*
   2  * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
   3  * Copyright (c) 2016 SAP SE. All rights reserved.
   4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5  *
   6  * This code is free software; you can redistribute it and/or modify it
   7  * under the terms of the GNU General Public License version 2 only, as
   8  * published by the Free Software Foundation.
   9  *
  10  * This code is distributed in the hope that it will be useful, but WITHOUT
  11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13  * version 2 for more details (a copy is included in the LICENSE file that
  14  * accompanied this code).
  15  *
  16  * You should have received a copy of the GNU General Public License version
  17  * 2 along with this work; if not, write to the Free Software Foundation,
  18  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  19  *
  20  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  21  * or visit www.oracle.com if you need additional information or have any
  22  * questions.
  23  *


  98                          bool throw_monitor_exception = true,
  99                          bool install_monitor_exception = true,
 100                          bool notify_jvmti = true);
 101 
 102  public:
 103   // Super call_VM calls - correspond to MacroAssembler::call_VM(_leaf) calls.
 104   void super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2);
 105   void super_call_VM(Register thread_cache, Register oop_result, Register last_java_sp,
 106                      address entry_point, Register arg_1, Register arg_2, bool check_exception = true);
 107 
 108   // Generate a subtype check: branch to ok_is_subtype if sub_klass is
 109   // a subtype of super_klass. Blows registers tmp1, tmp2 and tmp3.
 110   void gen_subtype_check(Register sub_klass, Register super_klass, Register tmp1, Register tmp2, Label &ok_is_subtype);
 111 
 112   void get_cache_and_index_at_bcp(Register cache, Register cpe_offset, int bcp_offset, size_t index_size = sizeof(u2));
 113   void get_cache_and_index_and_bytecode_at_bcp(Register cache, Register cpe_offset, Register bytecode,
 114                                                int byte_no, int bcp_offset, size_t index_size = sizeof(u2));
 115   void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset, size_t index_size = sizeof(u2));
 116   void get_cache_index_at_bcp(Register index, int bcp_offset, size_t index_size = sizeof(u2));
 117   void load_resolved_reference_at_index(Register result, Register index);


 118 
 119   // Pop topmost element from stack. It just disappears. Useful if
 120   // consumed previously by access via stackTop().
 121   void popx(int len);
 122   void pop_i()   { popx(1); }
 123   void pop_ptr() { popx(1); }
 124   void pop_l()   { popx(2); }
 125   void pop_f()   { popx(1); }
 126   void pop_d()   { popx(2); }
 127   // Get Address object of stack top. No checks. No pop.
 128   // Purpose: provide address of stack operand to exploit reg-mem operations.
 129   // Avoid RISC-like mem2reg - reg-reg-op sequence.
 130   Address stackTop();
 131 
 132   // Helpers for expression stack.
 133   void pop_i(     Register r);
 134   void pop_ptr(   Register r);
 135   void pop_l(     Register r);
 136   void pop_f(FloatRegister f);
 137   void pop_d(FloatRegister f);


   1 /*
   2  * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
   3  * Copyright (c) 2016, 2017 SAP SE. All rights reserved.
   4  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   5  *
   6  * This code is free software; you can redistribute it and/or modify it
   7  * under the terms of the GNU General Public License version 2 only, as
   8  * published by the Free Software Foundation.
   9  *
  10  * This code is distributed in the hope that it will be useful, but WITHOUT
  11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13  * version 2 for more details (a copy is included in the LICENSE file that
  14  * accompanied this code).
  15  *
  16  * You should have received a copy of the GNU General Public License version
  17  * 2 along with this work; if not, write to the Free Software Foundation,
  18  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  19  *
  20  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  21  * or visit www.oracle.com if you need additional information or have any
  22  * questions.
  23  *


  98                          bool throw_monitor_exception = true,
  99                          bool install_monitor_exception = true,
 100                          bool notify_jvmti = true);
 101 
 102  public:
 103   // Super call_VM calls - correspond to MacroAssembler::call_VM(_leaf) calls.
 104   void super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2);
 105   void super_call_VM(Register thread_cache, Register oop_result, Register last_java_sp,
 106                      address entry_point, Register arg_1, Register arg_2, bool check_exception = true);
 107 
 108   // Generate a subtype check: branch to ok_is_subtype if sub_klass is
 109   // a subtype of super_klass. Blows registers tmp1, tmp2 and tmp3.
 110   void gen_subtype_check(Register sub_klass, Register super_klass, Register tmp1, Register tmp2, Label &ok_is_subtype);
 111 
 112   void get_cache_and_index_at_bcp(Register cache, Register cpe_offset, int bcp_offset, size_t index_size = sizeof(u2));
 113   void get_cache_and_index_and_bytecode_at_bcp(Register cache, Register cpe_offset, Register bytecode,
 114                                                int byte_no, int bcp_offset, size_t index_size = sizeof(u2));
 115   void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset, size_t index_size = sizeof(u2));
 116   void get_cache_index_at_bcp(Register index, int bcp_offset, size_t index_size = sizeof(u2));
 117   void load_resolved_reference_at_index(Register result, Register index);
 118   // load cpool->resolved_klass_at(index)
 119   void load_resolved_klass_at_offset(Register cpool, Register offset, Register iklass);
 120 
 121   // Pop topmost element from stack. It just disappears. Useful if
 122   // consumed previously by access via stackTop().
 123   void popx(int len);
 124   void pop_i()   { popx(1); }
 125   void pop_ptr() { popx(1); }
 126   void pop_l()   { popx(2); }
 127   void pop_f()   { popx(1); }
 128   void pop_d()   { popx(2); }
 129   // Get Address object of stack top. No checks. No pop.
 130   // Purpose: provide address of stack operand to exploit reg-mem operations.
 131   // Avoid RISC-like mem2reg - reg-reg-op sequence.
 132   Address stackTop();
 133 
 134   // Helpers for expression stack.
 135   void pop_i(     Register r);
 136   void pop_ptr(   Register r);
 137   void pop_l(     Register r);
 138   void pop_f(FloatRegister f);
 139   void pop_d(FloatRegister f);


< prev index next >