2189 ciMethod* profiled_method, int profiled_bci); |
2191 ciMethod* profiled_method, int profiled_bci); |
2190 // MethodData* profiling |
2192 // MethodData* profiling |
2191 void profile_call(ciMethod* method, int bci, ciMethod* callee, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* cha_klass) { |
2193 void profile_call(ciMethod* method, int bci, ciMethod* callee, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* cha_klass) { |
2192 append(new LIR_OpProfileCall(lir_profile_call, method, bci, callee, mdo, recv, t1, cha_klass)); |
2194 append(new LIR_OpProfileCall(lir_profile_call, method, bci, callee, mdo, recv, t1, cha_klass)); |
2193 } |
2195 } |
|
2196 |
|
2197 void xadd(LIR_Opr src, LIR_Opr add, LIR_Opr res, LIR_Opr tmp) { append(new LIR_Op2(lir_xadd, src, add, res, tmp)); } |
|
2198 void xchg(LIR_Opr src, LIR_Opr set, LIR_Opr res, LIR_Opr tmp) { append(new LIR_Op2(lir_xchg, src, set, res, tmp)); } |
2194 }; |
2199 }; |
2195 |
2200 |
2196 void print_LIR(BlockList* blocks); |
2201 void print_LIR(BlockList* blocks); |
2197 |
2202 |
2198 class LIR_InsertionBuffer : public CompilationResourceObj { |
2203 class LIR_InsertionBuffer : public CompilationResourceObj { |
2285 |
2290 |
2286 } else if (opr->is_pointer()) { |
2291 } else if (opr->is_pointer()) { |
2287 LIR_Address* address = opr->as_address_ptr(); |
2292 LIR_Address* address = opr->as_address_ptr(); |
2288 if (address != NULL) { |
2293 if (address != NULL) { |
2289 // special handling for addresses: add base and index register of the address |
2294 // special handling for addresses: add base and index register of the address |
2290 // both are always input operands! |
2295 // both are always input operands or temp if we want to extend |
|
2296 // their liveness! |
|
2297 if (mode == outputMode) { |
|
2298 mode = inputMode; |
|
2299 } |
|
2300 assert (mode == inputMode || mode == tempMode, "input or temp only for addresses"); |
2291 if (address->_base->is_valid()) { |
2301 if (address->_base->is_valid()) { |
2292 assert(address->_base->is_register(), "must be"); |
2302 assert(address->_base->is_register(), "must be"); |
2293 assert(_oprs_len[inputMode] < maxNumberOfOperands, "array overflow"); |
2303 assert(_oprs_len[mode] < maxNumberOfOperands, "array overflow"); |
2294 _oprs_new[inputMode][_oprs_len[inputMode]++] = &address->_base; |
2304 _oprs_new[mode][_oprs_len[mode]++] = &address->_base; |
2295 } |
2305 } |
2296 if (address->_index->is_valid()) { |
2306 if (address->_index->is_valid()) { |
2297 assert(address->_index->is_register(), "must be"); |
2307 assert(address->_index->is_register(), "must be"); |
2298 assert(_oprs_len[inputMode] < maxNumberOfOperands, "array overflow"); |
2308 assert(_oprs_len[mode] < maxNumberOfOperands, "array overflow"); |
2299 _oprs_new[inputMode][_oprs_len[inputMode]++] = &address->_index; |
2309 _oprs_new[mode][_oprs_len[mode]++] = &address->_index; |
2300 } |
2310 } |
2301 |
2311 |
2302 } else { |
2312 } else { |
2303 assert(opr->is_constant(), "constant operands are not processed"); |
2313 assert(opr->is_constant(), "constant operands are not processed"); |
2304 } |
2314 } |