@@ -11955,44 +11955,38 @@ instruct compareAndSwapN(mRegI res, indirect mem_ptr, mRegN oldval, mRegN newval
1195511955
1195611956instruct get_and_setI(indirect mem, mRegI newv, mRegI prev) %{
1195711957 match(Set prev (GetAndSetI mem newv));
11958+ effect(TEMP_DEF prev);
1195811959 ins_cost(2 * MEMORY_REF_COST);
11959- format %{ "amswap_db_w $prev, $newv, [$mem]" %}
11960+ format %{ "amswap_db_w $prev, $newv, [$mem] @get_and_setI " %}
1196011961 ins_encode %{
1196111962 Register prev = $prev$$Register;
1196211963 Register newv = $newv$$Register;
1196311964 Register addr = as_Register($mem$$base);
11964- if (prev == newv || prev == addr) {
11965- __ amswap_db_w(AT, newv, addr);
11966- __ move(prev, AT);
11967- } else {
11968- __ amswap_db_w(prev, newv, addr);
11969- }
11965+
11966+ __ amswap_db_w(prev, newv, addr);
1197011967 %}
1197111968 ins_pipe( pipe_serial );
1197211969%}
1197311970
1197411971instruct get_and_setL(indirect mem, mRegL newv, mRegL prev) %{
1197511972 match(Set prev (GetAndSetL mem newv));
11973+ effect(TEMP_DEF prev);
1197611974 ins_cost(2 * MEMORY_REF_COST);
11977- format %{ "amswap_db_d $prev, $newv, [$mem]" %}
11975+ format %{ "amswap_db_d $prev, $newv, [$mem] @get_and_setL " %}
1197811976 ins_encode %{
1197911977 Register prev = $prev$$Register;
1198011978 Register newv = $newv$$Register;
1198111979 Register addr = as_Register($mem$$base);
11982- if (prev == newv || prev == addr) {
11983- __ amswap_db_d(AT, newv, addr);
11984- __ move(prev, AT);
11985- } else {
11986- __ amswap_db_d(prev, newv, addr);
11987- }
11980+
11981+ __ amswap_db_d(prev, newv, addr);
1198811982 %}
1198911983 ins_pipe( pipe_serial );
1199011984%}
1199111985
1199211986instruct get_and_setN(indirect mem, mRegN newv, mRegN prev) %{
1199311987 match(Set prev (GetAndSetN mem newv));
1199411988 ins_cost(2 * MEMORY_REF_COST);
11995- format %{ "amswap_db_w $prev, $newv, [$mem]" %}
11989+ format %{ "amswap_db_w $prev, $newv, [$mem] @get_and_setN " %}
1199611990 ins_encode %{
1199711991 Register prev = $prev$$Register;
1199811992 Register newv = $newv$$Register;
@@ -12005,36 +11999,30 @@ instruct get_and_setN(indirect mem, mRegN newv, mRegN prev) %{
1200511999
1200612000instruct get_and_setP(indirect mem, mRegP newv, mRegP prev) %{
1200712001 match(Set prev (GetAndSetP mem newv));
12002+ effect(TEMP_DEF prev);
1200812003 ins_cost(2 * MEMORY_REF_COST);
12009- format %{ "amswap_db_d $prev, $newv, [$mem]" %}
12004+ format %{ "amswap_db_d $prev, $newv, [$mem] @get_and_setP " %}
1201012005 ins_encode %{
1201112006 Register prev = $prev$$Register;
1201212007 Register newv = $newv$$Register;
1201312008 Register addr = as_Register($mem$$base);
12014- if (prev == newv || prev == addr) {
12015- __ amswap_db_d(AT, newv, addr);
12016- __ move(prev, AT);
12017- } else {
12018- __ amswap_db_d(prev, newv, addr);
12019- }
12009+
12010+ __ amswap_db_d(prev, newv, addr);
1202012011 %}
1202112012 ins_pipe( pipe_serial );
1202212013%}
1202312014
1202412015instruct get_and_addL(indirect mem, mRegL newval, mRegL incr) %{
1202512016 match(Set newval (GetAndAddL mem incr));
12017+ effect(TEMP_DEF newval);
1202612018 ins_cost(2 * MEMORY_REF_COST + 1);
12027- format %{ "amadd_db_d $newval, [$mem], $incr" %}
12019+ format %{ "amadd_db_d $newval, [$mem], $incr @get_and_addL " %}
1202812020 ins_encode %{
1202912021 Register newv = $newval$$Register;
1203012022 Register incr = $incr$$Register;
1203112023 Register addr = as_Register($mem$$base);
12032- if (newv == incr || newv == addr) {
12033- __ amadd_db_d(AT, incr, addr);
12034- __ move(newv, AT);
12035- } else {
12036- __ amadd_db_d(newv, incr, addr);
12037- }
12024+
12025+ __ amadd_db_d(newv, incr, addr);
1203812026 %}
1203912027 ins_pipe( pipe_serial );
1204012028%}
@@ -12043,7 +12031,7 @@ instruct get_and_addL_no_res(indirect mem, Universe dummy, mRegL incr) %{
1204312031 predicate(n->as_LoadStore()->result_not_used());
1204412032 match(Set dummy (GetAndAddL mem incr));
1204512033 ins_cost(2 * MEMORY_REF_COST);
12046- format %{ "amadd_db_d [$mem], $incr" %}
12034+ format %{ "amadd_db_d [$mem], $incr @get_and_addL_no_res " %}
1204712035 ins_encode %{
1204812036 __ amadd_db_d(R0, $incr$$Register, as_Register($mem$$base));
1204912037 %}
@@ -12052,18 +12040,15 @@ instruct get_and_addL_no_res(indirect mem, Universe dummy, mRegL incr) %{
1205212040
1205312041instruct get_and_addI(indirect mem, mRegI newval, mRegIorL2I incr) %{
1205412042 match(Set newval (GetAndAddI mem incr));
12043+ effect(TEMP_DEF newval);
1205512044 ins_cost(2 * MEMORY_REF_COST + 1);
12056- format %{ "amadd_db_w $newval, [$mem], $incr" %}
12045+ format %{ "amadd_db_w $newval, [$mem], $incr @get_and_addI " %}
1205712046 ins_encode %{
1205812047 Register newv = $newval$$Register;
1205912048 Register incr = $incr$$Register;
1206012049 Register addr = as_Register($mem$$base);
12061- if (newv == incr || newv == addr) {
12062- __ amadd_db_w(AT, incr, addr);
12063- __ move(newv, AT);
12064- } else {
12065- __ amadd_db_w(newv, incr, addr);
12066- }
12050+
12051+ __ amadd_db_w(newv, incr, addr);
1206712052 %}
1206812053 ins_pipe( pipe_serial );
1206912054%}
@@ -12072,7 +12057,7 @@ instruct get_and_addI_no_res(indirect mem, Universe dummy, mRegIorL2I incr) %{
1207212057 predicate(n->as_LoadStore()->result_not_used());
1207312058 match(Set dummy (GetAndAddI mem incr));
1207412059 ins_cost(2 * MEMORY_REF_COST);
12075- format %{ "amadd_db_w [$mem], $incr" %}
12060+ format %{ "amadd_db_w [$mem], $incr @get_and_addI_no_res " %}
1207612061 ins_encode %{
1207712062 __ amadd_db_w(R0, $incr$$Register, as_Register($mem$$base));
1207812063 %}
0 commit comments