comparison src/share/vm/memory/barrierSet.hpp @ 113:ba764ed4b6f2

6420645: Create a vm that uses compressed oops for up to 32gb heapsizes Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author coleenp
date Sun, 13 Apr 2008 17:43:42 -0400
parents a61af66fc99e
children d1605aabd0a1 37f87013dfd8
comparison
equal deleted inserted replaced
110:a49a647afe9a 113:ba764ed4b6f2
52 virtual bool has_write_ref_barrier() = 0; 52 virtual bool has_write_ref_barrier() = 0;
53 virtual bool has_write_prim_barrier() = 0; 53 virtual bool has_write_prim_barrier() = 0;
54 54
55 // These functions indicate whether a particular access of the given 55 // These functions indicate whether a particular access of the given
56 // kinds requires a barrier. 56 // kinds requires a barrier.
57 virtual bool read_ref_needs_barrier(oop* field) = 0; 57 virtual bool read_ref_needs_barrier(void* field) = 0;
58 virtual bool read_prim_needs_barrier(HeapWord* field, size_t bytes) = 0; 58 virtual bool read_prim_needs_barrier(HeapWord* field, size_t bytes) = 0;
59 virtual bool write_ref_needs_barrier(oop* field, oop new_val) = 0; 59 virtual bool write_ref_needs_barrier(void* field, oop new_val) = 0;
60 virtual bool write_prim_needs_barrier(HeapWord* field, size_t bytes, juint val1, juint val2) = 0; 60 virtual bool write_prim_needs_barrier(HeapWord* field, size_t bytes, juint val1, juint val2) = 0;
61 61
62 // The first four operations provide a direct implementation of the 62 // The first four operations provide a direct implementation of the
63 // barrier set. An interpreter loop, for example, could call these 63 // barrier set. An interpreter loop, for example, could call these
64 // directly, as appropriate. 64 // directly, as appropriate.
65 65
66 // Invoke the barrier, if any, necessary when reading the given ref field. 66 // Invoke the barrier, if any, necessary when reading the given ref field.
67 virtual void read_ref_field(oop* field) = 0; 67 virtual void read_ref_field(void* field) = 0;
68 68
69 // Invoke the barrier, if any, necessary when reading the given primitive 69 // Invoke the barrier, if any, necessary when reading the given primitive
70 // "field" of "bytes" bytes in "obj". 70 // "field" of "bytes" bytes in "obj".
71 virtual void read_prim_field(HeapWord* field, size_t bytes) = 0; 71 virtual void read_prim_field(HeapWord* field, size_t bytes) = 0;
72 72
73 // Invoke the barrier, if any, necessary when writing "new_val" into the 73 // Invoke the barrier, if any, necessary when writing "new_val" into the
74 // ref field at "offset" in "obj". 74 // ref field at "offset" in "obj".
75 // (For efficiency reasons, this operation is specialized for certain 75 // (For efficiency reasons, this operation is specialized for certain
76 // barrier types. Semantically, it should be thought of as a call to the 76 // barrier types. Semantically, it should be thought of as a call to the
77 // virtual "_work" function below, which must implement the barrier.) 77 // virtual "_work" function below, which must implement the barrier.)
78 inline void write_ref_field(oop* field, oop new_val); 78 inline void write_ref_field(void* field, oop new_val);
79 protected: 79 protected:
80 virtual void write_ref_field_work(oop* field, oop new_val) = 0; 80 virtual void write_ref_field_work(void* field, oop new_val) = 0;
81 public: 81 public:
82 82
83 // Invoke the barrier, if any, necessary when writing the "bytes"-byte 83 // Invoke the barrier, if any, necessary when writing the "bytes"-byte
84 // value(s) "val1" (and "val2") into the primitive "field". 84 // value(s) "val1" (and "val2") into the primitive "field".
85 virtual void write_prim_field(HeapWord* field, size_t bytes, 85 virtual void write_prim_field(HeapWord* field, size_t bytes,