g1_specialized_oop_closures.hpp revision 3122
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder/*
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens Elkner * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder *
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder * This code is free software; you can redistribute it and/or modify it
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu Prodescu * under the terms of the GNU General Public License version 2 only, as
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder * published by the Free Software Foundation.
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder *
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder * This code is distributed in the hope that it will be useful, but WITHOUT
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder * version 2 for more details (a copy is included in the LICENSE file that
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder * accompanied this code).
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder *
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder * You should have received a copy of the GNU General Public License version
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder * 2 along with this work; if not, write to the Free Software Foundation,
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder *
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder * or visit www.oracle.com if you need additional information or have any
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder * questions.
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder *
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder */
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1_SPECIALIZED_OOP_CLOSURES_HPP
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder#define SHARE_VM_GC_IMPLEMENTATION_G1_G1_SPECIALIZED_OOP_CLOSURES_HPP
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder
ece3b1a5353a9af3c966a1d5453594ed35334f7bJonathan von Schroeder// The following OopClosure types get specialized versions of
d71447e45047d07006b4c20409fbd8ea287df01fJonathan von Schroeder// "oop_oop_iterate" that invoke the closures' do_oop methods
d71447e45047d07006b4c20409fbd8ea287df01fJonathan von Schroeder// non-virtually, using a mechanism defined in this file. Extend these
ece3b1a5353a9af3c966a1d5453594ed35334f7bJonathan von Schroeder// macros in the obvious way to add specializations for new closures.
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder// Forward declarations.
ece3b1a5353a9af3c966a1d5453594ed35334f7bJonathan von Schroederenum G1Barrier {
ece3b1a5353a9af3c966a1d5453594ed35334f7bJonathan von Schroeder G1BarrierNone,
ece3b1a5353a9af3c966a1d5453594ed35334f7bJonathan von Schroeder G1BarrierRS,
ece3b1a5353a9af3c966a1d5453594ed35334f7bJonathan von Schroeder G1BarrierEvac
ece3b1a5353a9af3c966a1d5453594ed35334f7bJonathan von Schroeder};
ece3b1a5353a9af3c966a1d5453594ed35334f7bJonathan von Schroeder
ece3b1a5353a9af3c966a1d5453594ed35334f7bJonathan von Schroedertemplate<bool do_gen_barrier, G1Barrier barrier, bool do_mark_object>
ece3b1a5353a9af3c966a1d5453594ed35334f7bJonathan von Schroederclass G1ParCopyClosure;
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroederclass G1ParScanClosure;
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroederclass G1ParPushHeapRSClosure;
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder
ece3b1a5353a9af3c966a1d5453594ed35334f7bJonathan von Schroedertypedef G1ParCopyClosure<false, G1BarrierEvac, false> G1ParScanHeapEvacClosure;
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroederclass FilterIntoCSClosure;
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroederclass FilterOutOfRegionClosure;
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroederclass G1CMOopClosure;
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroederclass G1RootRegionScanClosure;
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder// Specialized oop closures from g1RemSet.cpp
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroederclass G1Mux2Closure;
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroederclass G1TriggerClosure;
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroederclass G1InvokeIfNotTriggeredClosure;
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroederclass G1UpdateRSOrPushRefOopClosure;
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder#ifdef FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder#error "FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES already defined."
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder#endif
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder#define FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES(f) \
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder f(G1ParScanHeapEvacClosure,_nv) \
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder f(G1ParScanClosure,_nv) \
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder f(G1ParPushHeapRSClosure,_nv) \
d71447e45047d07006b4c20409fbd8ea287df01fJonathan von Schroeder f(FilterIntoCSClosure,_nv) \
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder f(FilterOutOfRegionClosure,_nv) \
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder f(G1CMOopClosure,_nv) \
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder f(G1RootRegionScanClosure,_nv) \
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder f(G1Mux2Closure,_nv) \
d71447e45047d07006b4c20409fbd8ea287df01fJonathan von Schroeder f(G1TriggerClosure,_nv) \
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder f(G1InvokeIfNotTriggeredClosure,_nv) \
d71447e45047d07006b4c20409fbd8ea287df01fJonathan von Schroeder f(G1UpdateRSOrPushRefOopClosure,_nv)
1a38107941725211e7c3f051f7a8f5e12199f03acmaeder
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder#ifdef FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES
d71447e45047d07006b4c20409fbd8ea287df01fJonathan von Schroeder#error "FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES already defined."
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder#endif
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder
d71447e45047d07006b4c20409fbd8ea287df01fJonathan von Schroeder#define FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(f)
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1_SPECIALIZED_OOP_CLOSURES_HPP
b35e053c2c5a5ea0f13decfd0303894861d82b4dJonathan von Schroeder