Mercurial > hg > truffle
comparison src/share/vm/c1/c1_LinearScan.cpp @ 1060:323bd24c6520
6769124: various 64-bit fixes for c1
Reviewed-by: never
author | roland |
---|---|
date | Mon, 02 Nov 2009 11:17:55 +0100 |
parents | bd02caa94611 |
children | c466efa608d5 |
comparison
equal
deleted
inserted
replaced
1059:389049f3f393 | 1060:323bd24c6520 |
---|---|
2462 return 1; | 2462 return 1; |
2463 } | 2463 } |
2464 | 2464 |
2465 case T_LONG: // fall through | 2465 case T_LONG: // fall through |
2466 case T_DOUBLE: { | 2466 case T_DOUBLE: { |
2467 #ifdef _LP64 | |
2468 scope_values->append(&_int_0_scope_value); | |
2469 scope_values->append(new ConstantLongValue(c->as_jlong_bits())); | |
2470 #else | |
2467 if (hi_word_offset_in_bytes > lo_word_offset_in_bytes) { | 2471 if (hi_word_offset_in_bytes > lo_word_offset_in_bytes) { |
2468 scope_values->append(new ConstantIntValue(c->as_jint_hi_bits())); | 2472 scope_values->append(new ConstantIntValue(c->as_jint_hi_bits())); |
2469 scope_values->append(new ConstantIntValue(c->as_jint_lo_bits())); | 2473 scope_values->append(new ConstantIntValue(c->as_jint_lo_bits())); |
2470 } else { | 2474 } else { |
2471 scope_values->append(new ConstantIntValue(c->as_jint_lo_bits())); | 2475 scope_values->append(new ConstantIntValue(c->as_jint_lo_bits())); |
2472 scope_values->append(new ConstantIntValue(c->as_jint_hi_bits())); | 2476 scope_values->append(new ConstantIntValue(c->as_jint_hi_bits())); |
2473 } | 2477 } |
2474 | 2478 #endif |
2475 return 2; | 2479 return 2; |
2476 } | 2480 } |
2477 | 2481 |
2478 default: | 2482 default: |
2479 ShouldNotReachHere(); | 2483 ShouldNotReachHere(); |
2501 return 1; | 2505 return 1; |
2502 | 2506 |
2503 } else if (opr->is_single_cpu()) { | 2507 } else if (opr->is_single_cpu()) { |
2504 bool is_oop = opr->is_oop_register(); | 2508 bool is_oop = opr->is_oop_register(); |
2505 int cache_idx = opr->cpu_regnr() * 2 + (is_oop ? 1 : 0); | 2509 int cache_idx = opr->cpu_regnr() * 2 + (is_oop ? 1 : 0); |
2510 Location::Type int_loc_type = NOT_LP64(Location::normal) LP64_ONLY(Location::int_in_long); | |
2506 | 2511 |
2507 ScopeValue* sv = _scope_value_cache.at(cache_idx); | 2512 ScopeValue* sv = _scope_value_cache.at(cache_idx); |
2508 if (sv == NULL) { | 2513 if (sv == NULL) { |
2509 Location::Type loc_type = is_oop ? Location::oop : Location::normal; | 2514 Location::Type loc_type = is_oop ? Location::oop : int_loc_type; |
2510 VMReg rname = frame_map()->regname(opr); | 2515 VMReg rname = frame_map()->regname(opr); |
2511 sv = new LocationValue(Location::new_reg_loc(loc_type, rname)); | 2516 sv = new LocationValue(Location::new_reg_loc(loc_type, rname)); |
2512 _scope_value_cache.at_put(cache_idx, sv); | 2517 _scope_value_cache.at_put(cache_idx, sv); |
2513 } | 2518 } |
2514 | 2519 |
2515 // check if cached value is correct | 2520 // check if cached value is correct |
2516 DEBUG_ONLY(assert_equal(sv, new LocationValue(Location::new_reg_loc(is_oop ? Location::oop : Location::normal, frame_map()->regname(opr))))); | 2521 DEBUG_ONLY(assert_equal(sv, new LocationValue(Location::new_reg_loc(is_oop ? Location::oop : int_loc_type, frame_map()->regname(opr))))); |
2517 | 2522 |
2518 scope_values->append(sv); | 2523 scope_values->append(sv); |
2519 return 1; | 2524 return 1; |
2520 | 2525 |
2521 #ifdef X86 | 2526 #ifdef X86 |