Add fence to allocations in nterp.
Those were missed in the implementation of nterp. Thanks
jaeheon@google.com for making us realize it!
Test: test.py
Bug: 173676071
Change-Id: I6aa00b4ce0ebb553d9fd83a40661191ebe3b56b5
diff --git a/runtime/interpreter/mterp/arm64ng/array.S b/runtime/interpreter/mterp/arm64ng/array.S
index 9edbb22..1689b01 100644
--- a/runtime/interpreter/mterp/arm64ng/array.S
+++ b/runtime/interpreter/mterp/arm64ng/array.S
@@ -170,6 +170,7 @@
GET_VREG w1, w1 // w1<- vB (array length)
ldr lr, [xSELF, #THREAD_ALLOC_ARRAY_ENTRYPOINT_OFFSET]
blr lr
+ dmb ishst // need fence for making array's class visible
ubfx w1, wINST, #8, #4 // w1<- A
SET_VREG_OBJECT w0, w1
FETCH_ADVANCE_INST 2
diff --git a/runtime/interpreter/mterp/arm64ng/object.S b/runtime/interpreter/mterp/arm64ng/object.S
index b843fcd..b6a6e24 100644
--- a/runtime/interpreter/mterp/arm64ng/object.S
+++ b/runtime/interpreter/mterp/arm64ng/object.S
@@ -466,6 +466,7 @@
4:
ldr lr, [xSELF, #THREAD_ALLOC_OBJECT_ENTRYPOINT_OFFSET]
blr lr
+ dmb ishst // need fence for making object's class visible
1:
lsr w1, wINST, #8 // w1 <- A
SET_VREG_OBJECT w0, w1 // fp[A] <- value
diff --git a/runtime/interpreter/mterp/armng/array.S b/runtime/interpreter/mterp/armng/array.S
index 49c4e38..e685cbf 100644
--- a/runtime/interpreter/mterp/armng/array.S
+++ b/runtime/interpreter/mterp/armng/array.S
@@ -177,6 +177,7 @@
GET_VREG r1, r1 // r1<- vB (array length)
ldr lr, [rSELF, #THREAD_ALLOC_ARRAY_ENTRYPOINT_OFFSET]
blx lr
+ dmb ishst // need fence for making array's class visible
ubfx r1, rINST, #8, #4 // r1<- A
SET_VREG_OBJECT r0, r1
FETCH_ADVANCE_INST 2
diff --git a/runtime/interpreter/mterp/armng/object.S b/runtime/interpreter/mterp/armng/object.S
index 984565c..cde8cf9 100644
--- a/runtime/interpreter/mterp/armng/object.S
+++ b/runtime/interpreter/mterp/armng/object.S
@@ -513,8 +513,9 @@
4:
ldr lr, [rSELF, #THREAD_ALLOC_OBJECT_ENTRYPOINT_OFFSET]
blx lr
+ dmb ishst // need fence for making object's class visible
1:
- lsr r1, rINST, #8 // r1 <- A
+ lsr r1, rINST, #8 // r1 <- A
SET_VREG_OBJECT r0, r1 // fp[A] <- value
FETCH_ADVANCE_INST 2
GET_INST_OPCODE ip