comparison src/cpu/x86/vm/x86_64.ad @ 10139:35c15dad89ea

8011901: Unsafe.getAndAddLong(obj, off, delta) does not work properly with long deltas Summary: instruct xaddL_no_res shouldn't allow 64 bit constants. Reviewed-by: kvn
author roland
date Tue, 16 Apr 2013 17:06:39 +0200
parents 886d1fd67dc3
children 78603aa58b1e
comparison
equal deleted inserted replaced
10125:f78763f49817 10139:35c15dad89ea
2220 %{ 2220 %{
2221 // Output immediate 2221 // Output immediate
2222 $$$emit32$src$$constant; 2222 $$$emit32$src$$constant;
2223 %} 2223 %}
2224 2224
2225 enc_class Con64(immL src)
2226 %{
2227 // Output immediate
2228 emit_d64($src$$constant);
2229 %}
2230
2231 enc_class Con32F_as_bits(immF src) 2225 enc_class Con32F_as_bits(immF src)
2232 %{ 2226 %{
2233 // Output Float immediate bits 2227 // Output Float immediate bits
2234 jfloat jf = $src$$constant; 2228 jfloat jf = $src$$constant;
2235 jint jf_as_bits = jint_cast(jf); 2229 jint jf_as_bits = jint_cast(jf);
7606 __ xaddl($mem$$Address, $newval$$Register); 7600 __ xaddl($mem$$Address, $newval$$Register);
7607 %} 7601 %}
7608 ins_pipe( pipe_cmpxchg ); 7602 ins_pipe( pipe_cmpxchg );
7609 %} 7603 %}
7610 7604
7611 instruct xaddL_no_res( memory mem, Universe dummy, immL add, rFlagsReg cr) %{ 7605 instruct xaddL_no_res( memory mem, Universe dummy, immL32 add, rFlagsReg cr) %{
7612 predicate(n->as_LoadStore()->result_not_used()); 7606 predicate(n->as_LoadStore()->result_not_used());
7613 match(Set dummy (GetAndAddL mem add)); 7607 match(Set dummy (GetAndAddL mem add));
7614 effect(KILL cr); 7608 effect(KILL cr);
7615 format %{ "ADDQ [$mem],$add" %} 7609 format %{ "ADDQ [$mem],$add" %}
7616 ins_encode %{ 7610 ins_encode %{