< prev index next >

src/hotspot/cpu/aarch64/aarch64.ad

Print this page

        

@@ -2907,19 +2907,21 @@
   %}
 
   enc_class aarch64_enc_cmpxchgs(memory mem, iRegINoSp oldval, iRegINoSp newval) %{
     MacroAssembler _masm(&cbuf);
     guarantee($mem$$index == -1 && $mem$$disp == 0, "impossible encoding");
-    __ cmpxchg($mem$$base$$Register, $oldval$$Register, $newval$$Register,
+    __ uxthw(rscratch2, $oldval$$Register);
+    __ cmpxchg($mem$$base$$Register, rscratch2, $newval$$Register,
                Assembler::halfword, /*acquire*/ false, /*release*/ true,
                /*weak*/ false, noreg);
   %}
 
   enc_class aarch64_enc_cmpxchgb(memory mem, iRegINoSp oldval, iRegINoSp newval) %{
     MacroAssembler _masm(&cbuf);
     guarantee($mem$$index == -1 && $mem$$disp == 0, "impossible encoding");
-    __ cmpxchg($mem$$base$$Register, $oldval$$Register, $newval$$Register,
+    __ uxtbw(rscratch2, $oldval$$Register);
+    __ cmpxchg($mem$$base$$Register, rscratch2, $newval$$Register,
                Assembler::byte, /*acquire*/ false, /*release*/ true,
                /*weak*/ false, noreg);
   %}
 
 
< prev index next >