X86: Add the other set VarHandles (setVolatile, setRelease, setOpaque)
This commit implements VarHandle.setVolatile, setRelease and setOpaque
intrisics. This also implied refactoring HandleFieldSet to be reused in
all set VarHandles, as the code is very similar.
Test: ART_HEAP_POISONING=true art/test.py --host --all-compiler -r --32
Test: ART_HEAP_POISONING=false art/test.py --host --all-compiler -r --32
Test: ART_USE_READ_BARRIER=true art/test.py --host --all-compiler -r --32
Test: ART_USE_READ_BARRIER=false art/test.py --host --all-compiler -r --32
Bug: 65872996
Change-Id: I9a1d5fec6c5086c1e77ba65c3337da1133b3e3f1
diff --git a/compiler/optimizing/code_generator_x86.h b/compiler/optimizing/code_generator_x86.h
index 24993c3..efadae4 100644
--- a/compiler/optimizing/code_generator_x86.h
+++ b/compiler/optimizing/code_generator_x86.h
@@ -243,6 +243,14 @@
Label* fixup_label,
ReadBarrierOption read_barrier_option);
+ void HandleFieldSet(HInstruction* instruction,
+ uint32_t value_index,
+ DataType::Type type,
+ Address field_addr,
+ Register base,
+ bool is_volatile,
+ bool value_can_be_null);
+
private:
// Generate code for the given suspend check. If not null, `successor`
// is the block to branch to if the suspend check is not needed, and after