ART: Fix arm32 instrumentation exit stub

Properly store, pass and restore floating point result.

Bug: 22047833

(cherry picked from commit 844fb67a8b5638c4e195dbbe510dc1626824a16c)

Change-Id: If5d9efbe63334c9b6353f76ce6e4fe519602482a
diff --git a/runtime/arch/arm/quick_entrypoints_arm.S b/runtime/arch/arm/quick_entrypoints_arm.S
index b06d2ca..ca3ca1d 100644
--- a/runtime/arch/arm/quick_entrypoints_arm.S
+++ b/runtime/arch/arm/quick_entrypoints_arm.S
@@ -1050,9 +1050,12 @@
     .cfi_adjust_cfa_offset 8
     .cfi_rel_offset r0, 0
     .cfi_rel_offset r1, 4
-    sub   sp, #8         @ space for return value argument
+    vpush {d0}           @ save fp return value
     .cfi_adjust_cfa_offset 8
-    strd r0, [sp]        @ r0/r1 -> [sp] for fpr_res
+    sub   sp, #8         @ space for return value argument. Note: AAPCS stack alignment is 8B, no
+                         @ need to align by 16.
+    .cfi_adjust_cfa_offset 8
+    vstr  d0, [sp]       @ d0 -> [sp] for fpr_res
     mov   r2, r0         @ pass return value as gpr_res
     mov   r3, r1
     mov   r0, r9         @ pass Thread::Current
@@ -1063,6 +1066,8 @@
 
     mov   r2, r0         @ link register saved by instrumentation
     mov   lr, r1         @ r1 is holding link register if we're to bounce to deoptimize
+    vpop  {d0}           @ restore fp return value
+    .cfi_adjust_cfa_offset -8
     pop   {r0, r1}       @ restore return value
     .cfi_adjust_cfa_offset -8
     .cfi_restore r0