src/hotspot/cpu/sparc/jniFastGetField_sparc.cpp
changeset 57570 d7304cf430f1
parent 50164 88bf53770be5
equal deleted inserted replaced
57569:be47f3ccdf12 57570:d7304cf430f1
     1 /*
     1 /*
     2  * Copyright (c) 2004, 2017, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
    68   Address cnt_addr(O3, cnt_addrlit.low10());
    68   Address cnt_addr(O3, cnt_addrlit.low10());
    69   __ ld (cnt_addr, G4);
    69   __ ld (cnt_addr, G4);
    70   __ andcc (G4, 1, G0);
    70   __ andcc (G4, 1, G0);
    71   __ br (Assembler::notZero, false, Assembler::pn, label1);
    71   __ br (Assembler::notZero, false, Assembler::pn, label1);
    72   __ delayed()->srl (O2, 2, O4);
    72   __ delayed()->srl (O2, 2, O4);
       
    73 
       
    74   if (JvmtiExport::can_post_field_access()) {
       
    75     // Check to see if a field access watch has been set before we
       
    76     // take the fast path.
       
    77     AddressLiteral get_field_access_count_addr(JvmtiExport::get_field_access_count_addr());
       
    78     __ load_contents(get_field_access_count_addr, O5);
       
    79     __ cmp_and_br_short(O5, 0, Assembler::notEqual, Assembler::pn, label1);
       
    80   }
       
    81 
    73   __ mov(O1, O5);
    82   __ mov(O1, O5);
    74 
    83 
    75   // Both O5 and G3 are clobbered by try_resolve_jobject_in_native.
    84   // Both O5 and G3 are clobbered by try_resolve_jobject_in_native.
    76   BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler();
    85   BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler();
    77   bs->try_resolve_jobject_in_native(masm, /* jni_env */ O0, /* obj */ O5, /* tmp */ G3, label1);
    86   bs->try_resolve_jobject_in_native(masm, /* jni_env */ O0, /* obj */ O5, /* tmp */ G3, label1);
   151   Address cnt_addr(G3, cnt_addrlit.low10());
   160   Address cnt_addr(G3, cnt_addrlit.low10());
   152   __ ld (cnt_addr, G4);
   161   __ ld (cnt_addr, G4);
   153   __ andcc (G4, 1, G0);
   162   __ andcc (G4, 1, G0);
   154   __ br (Assembler::notZero, false, Assembler::pn, label1);
   163   __ br (Assembler::notZero, false, Assembler::pn, label1);
   155   __ delayed()->srl (O2, 2, O4);
   164   __ delayed()->srl (O2, 2, O4);
       
   165 
       
   166   if (JvmtiExport::can_post_field_access()) {
       
   167     // Check to see if a field access watch has been set before we
       
   168     // take the fast path.
       
   169     AddressLiteral get_field_access_count_addr(JvmtiExport::get_field_access_count_addr());
       
   170     __ load_contents(get_field_access_count_addr, O5);
       
   171     __ cmp_and_br_short(O5, 0, Assembler::notEqual, Assembler::pn, label1);
       
   172   }
       
   173 
   156   __ mov(O1, O5);
   174   __ mov(O1, O5);
   157 
   175 
   158   // Both O5 and G1 are clobbered by try_resolve_jobject_in_native.
   176   // Both O5 and G1 are clobbered by try_resolve_jobject_in_native.
   159   BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler();
   177   BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler();
   160   bs->try_resolve_jobject_in_native(masm, /* jni_env */ O0, /* obj */ O5, /* tmp */ G1, label1);
   178   bs->try_resolve_jobject_in_native(masm, /* jni_env */ O0, /* obj */ O5, /* tmp */ G1, label1);
   209   Address cnt_addr(O3, cnt_addrlit.low10());
   227   Address cnt_addr(O3, cnt_addrlit.low10());
   210   __ ld (cnt_addr, G4);
   228   __ ld (cnt_addr, G4);
   211   __ andcc (G4, 1, G0);
   229   __ andcc (G4, 1, G0);
   212   __ br (Assembler::notZero, false, Assembler::pn, label1);
   230   __ br (Assembler::notZero, false, Assembler::pn, label1);
   213   __ delayed()->srl (O2, 2, O4);
   231   __ delayed()->srl (O2, 2, O4);
       
   232 
       
   233   if (JvmtiExport::can_post_field_access()) {
       
   234     // Check to see if a field access watch has been set before we
       
   235     // take the fast path.
       
   236     AddressLiteral get_field_access_count_addr(JvmtiExport::get_field_access_count_addr());
       
   237     __ load_contents(get_field_access_count_addr, O5);
       
   238     __ cmp_and_br_short(O5, 0, Assembler::notEqual, Assembler::pn, label1);
       
   239   }
       
   240 
   214   __ mov(O1, O5);
   241   __ mov(O1, O5);
   215 
   242 
   216   // Both O5 and G3 are clobbered by try_resolve_jobject_in_native.
   243   // Both O5 and G3 are clobbered by try_resolve_jobject_in_native.
   217   BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler();
   244   BarrierSetAssembler *bs = BarrierSet::barrier_set()->barrier_set_assembler();
   218   bs->try_resolve_jobject_in_native(masm, /* jni_env */ O0, /* obj */ O5, /* tmp */ G3, label1);
   245   bs->try_resolve_jobject_in_native(masm, /* jni_env */ O0, /* obj */ O5, /* tmp */ G3, label1);