350 // Should the Matcher clone shifts on addressing modes, expecting them to |
350 // Should the Matcher clone shifts on addressing modes, expecting them to |
351 // be subsumed into complex addressing expressions or compute them into |
351 // be subsumed into complex addressing expressions or compute them into |
352 // registers? True for Intel but false for most RISCs |
352 // registers? True for Intel but false for most RISCs |
353 static const bool clone_shift_expressions; |
353 static const bool clone_shift_expressions; |
354 |
354 |
|
355 static bool narrow_oop_use_complex_address(); |
|
356 |
|
357 // Generate implicit null check for narrow oops if it can fold |
|
358 // into address expression (x64). |
|
359 // |
|
360 // [R12 + narrow_oop_reg<<3 + offset] // fold into address expression |
|
361 // NullCheck narrow_oop_reg |
|
362 // |
|
363 // When narrow oops can't fold into address expression (Sparc) and |
|
364 // base is not null use decode_not_null and normal implicit null check. |
|
365 // Note, decode_not_null node can be used here since it is referenced |
|
366 // only on non null path but it requires special handling, see |
|
367 // collect_null_checks(): |
|
368 // |
|
369 // decode_not_null narrow_oop_reg, oop_reg // 'shift' and 'add base' |
|
370 // [oop_reg + offset] |
|
371 // NullCheck oop_reg |
|
372 // |
|
373 // With Zero base and when narrow oops can not fold into address |
|
374 // expression use normal implicit null check since only shift |
|
375 // is needed to decode narrow oop. |
|
376 // |
|
377 // decode narrow_oop_reg, oop_reg // only 'shift' |
|
378 // [oop_reg + offset] |
|
379 // NullCheck oop_reg |
|
380 // |
|
381 inline static bool gen_narrow_oop_implicit_null_checks() { |
|
382 return Universe::narrow_oop_use_implicit_null_checks() && |
|
383 (narrow_oop_use_complex_address() || |
|
384 Universe::narrow_oop_base() != NULL); |
|
385 } |
|
386 |
355 // Is it better to copy float constants, or load them directly from memory? |
387 // Is it better to copy float constants, or load them directly from memory? |
356 // Intel can load a float constant from a direct address, requiring no |
388 // Intel can load a float constant from a direct address, requiring no |
357 // extra registers. Most RISCs will have to materialize an address into a |
389 // extra registers. Most RISCs will have to materialize an address into a |
358 // register first, so they may as well materialize the constant immediately. |
390 // register first, so they may as well materialize the constant immediately. |
359 static const bool rematerialize_float_constants; |
391 static const bool rematerialize_float_constants; |