Mercurial > hg > graal-compiler
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 %{ |