17ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes/*
27ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * Copyright (C) 2010 The Android Open Source Project
37ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes *
47ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * Licensed under the Apache License, Version 2.0 (the "License");
57ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * you may not use this file except in compliance with the License.
67ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * You may obtain a copy of the License at
77ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes *
87ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes *      http://www.apache.org/licenses/LICENSE-2.0
97ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes *
107ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * Unless required by applicable law or agreed to in writing, software
117ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * distributed under the License is distributed on an "AS IS" BASIS,
127ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * See the License for the specific language governing permissions and
147ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * limitations under the License.
157ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes */
167ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes
17375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#ifndef DALVIK_ALLOC_WRITEBARRIER_H_
18375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#define DALVIK_ALLOC_WRITEBARRIER_H_
1944dcf29d18f819b4b9d78d4d81676681b57f44ceCarl Shapiro
207ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes/*
217ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * Note writes to the heap. These functions must be called if a field
227ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * of an Object in the heap changes, and before any GC safe-point. The
237ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * call is not needed if NULL is stored in the field.
247ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes */
257ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes
267ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes/*
277ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * The address within the Object has been written, and perhaps changed.
287ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes */
296e5cf6021b2f3e00e18ab402f23ab93b27c6061bBarry HayesINLINE void dvmWriteBarrierField(const Object *obj, void *addr)
306e5cf6021b2f3e00e18ab402f23ab93b27c6061bBarry Hayes{
316e5cf6021b2f3e00e18ab402f23ab93b27c6061bBarry Hayes    dvmMarkCard(obj);
327ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes}
337ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes
347ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes/*
357ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * All of the Object may have changed.
367ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes */
376e5cf6021b2f3e00e18ab402f23ab93b27c6061bBarry HayesINLINE void dvmWriteBarrierObject(const Object *obj)
386e5cf6021b2f3e00e18ab402f23ab93b27c6061bBarry Hayes{
396e5cf6021b2f3e00e18ab402f23ab93b27c6061bBarry Hayes    dvmMarkCard(obj);
407ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes}
417ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes
427ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes/*
437ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * Some or perhaps all of the array indexes in the Array, greater than
447ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * or equal to start and strictly less than end, have been written,
457ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes * and perhaps changed.
467ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes */
476e5cf6021b2f3e00e18ab402f23ab93b27c6061bBarry HayesINLINE void dvmWriteBarrierArray(const ArrayObject *obj,
486e5cf6021b2f3e00e18ab402f23ab93b27c6061bBarry Hayes                                 size_t start, size_t end)
496e5cf6021b2f3e00e18ab402f23ab93b27c6061bBarry Hayes{
506e5cf6021b2f3e00e18ab402f23ab93b27c6061bBarry Hayes    dvmMarkCard((Object *)obj);
517ef0755c91caeea2cc89d886e566e71dc626abedBarry Hayes}
5244dcf29d18f819b4b9d78d4d81676681b57f44ceCarl Shapiro
53375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#endif  // DALVIK_ALLOC_WRITEBARRIER_H_
54