< prev index next >

src/cpu/x86/vm/assembler_x86.hpp

Print this page




2208 
2209   // Set the Evex.Z field to be used to clear all non directed XMM/YMM/ZMM components
2210   void reset_is_clear_context(void) { _is_clear_context = false; }
2211 
2212   // Map back to current asembler so that we can manage object level assocation
2213   void set_current_assembler(Assembler *current_assembler) { _current_assembler = current_assembler; }
2214 
2215   // Address modifiers used for compressed displacement calculation
2216   void set_address_attributes(int tuple_type, int input_size_in_bits) {
2217     if (VM_Version::supports_evex()) {
2218       _tuple_type = tuple_type;
2219       _input_size_in_bits = input_size_in_bits;
2220     }
2221   }
2222 
2223   // Set embedded opmask register specifier.
2224   void set_embedded_opmask_register_specifier(KRegister mask) {
2225     _embedded_opmask_register_specifier = (*mask).encoding() & 0x7;
2226   }
2227 






































2228 };
2229 
2230 #endif // CPU_X86_VM_ASSEMBLER_X86_HPP


2208 
2209   // Set the Evex.Z field to be used to clear all non directed XMM/YMM/ZMM components
2210   void reset_is_clear_context(void) { _is_clear_context = false; }
2211 
2212   // Map back to current asembler so that we can manage object level assocation
2213   void set_current_assembler(Assembler *current_assembler) { _current_assembler = current_assembler; }
2214 
2215   // Address modifiers used for compressed displacement calculation
2216   void set_address_attributes(int tuple_type, int input_size_in_bits) {
2217     if (VM_Version::supports_evex()) {
2218       _tuple_type = tuple_type;
2219       _input_size_in_bits = input_size_in_bits;
2220     }
2221   }
2222 
2223   // Set embedded opmask register specifier.
2224   void set_embedded_opmask_register_specifier(KRegister mask) {
2225     _embedded_opmask_register_specifier = (*mask).encoding() & 0x7;
2226   }
2227 
2228 // This is shared between the interpreter and C1, and needs to be in multiple
2229 // places for each.  The code to invoke the actual sampling methods needs
2230 // to be provided by the user; thus, a macro.
2231 #define HEAP_MONITORING(ma, thread, var_size_in_bytes, con_size_in_bytes, object, t1, t2, sample_invocation) \
2232 do {                                                                \
2233   {                                                                 \
2234     SkipIfEqual skip_if(ma, &HeapMonitor, 0);                       \
2235     Label skip_sample;                                              \
2236     Register thr = thread;                                          \
2237     if (!thr->is_valid()) {                                         \
2238       NOT_LP64(assert(t1 != noreg,                                  \
2239                       "Need temporary register for constants"));    \
2240       thr = NOT_LP64(t1) LP64_ONLY(r15_thread);                     \
2241       NOT_LP64(ma -> get_thread(thr);)                              \
2242     }                                                               \
2243     /* Trigger heap monitoring event */                             \
2244     Address bus(thr,                                                \
2245                 JavaThread::bytes_until_sample_offset());           \
2246                                                                     \
2247     if (var_size_in_bytes->is_valid()) {                            \
2248       ma -> NOT_LP64(subl) LP64_ONLY(subq)(bus, var_size_in_bytes); \
2249     } else {                                                        \
2250       int csib = (con_size_in_bytes);                               \
2251       assert(t2 != noreg,                                           \
2252              "Need temporary register for constants");              \
2253       ma -> NOT_LP64(movl) LP64_ONLY(mov64)(t2, csib);              \
2254       ma -> NOT_LP64(subl) LP64_ONLY(subq)(bus, t2);                \
2255     }                                                               \
2256                                                                     \
2257     ma -> jcc(Assembler::positive, skip_sample);                    \
2258                                                                     \
2259     {                                                               \
2260       sample_invocation                                             \
2261     }                                                               \
2262     ma -> bind(skip_sample);                                        \
2263   }                                                                 \
2264 } while(0)
2265 
2266 };
2267 
2268 #endif // CPU_X86_VM_ASSEMBLER_X86_HPP
< prev index next >