diff options
| -rw-r--r-- | runtime/interpreter/mterp/arm64ng/object.S | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/runtime/interpreter/mterp/arm64ng/object.S b/runtime/interpreter/mterp/arm64ng/object.S index 5202ebcd3d..ade39d5e89 100644 --- a/runtime/interpreter/mterp/arm64ng/object.S +++ b/runtime/interpreter/mterp/arm64ng/object.S @@ -195,6 +195,10 @@ mov x3, #0 EXPORT_PC bl nterp_get_instance_field_offset + // Zero extension (nterp_get_instance_field_offset returns uint32_t) of the return value is + // needed as the value is used below via wider X0 register - AARCH64 AAPCS specifies that + // "... any unused bits in the register have unspecified value" (see 6.8.2, 6.9). + mov w0, w0 tbz w0, #31, .L${opcode}_resume CLEAR_INSTANCE_VOLATILE_MARKER w0 lsr w2, wINST, #12 // w2<- B @@ -273,6 +277,10 @@ .endif EXPORT_PC bl nterp_get_instance_field_offset + // Zero extension (nterp_get_instance_field_offset returns uint32_t) of the return value is + // needed as the value is used below via wider X0 register - AARCH64 AAPCS specifies that + // "... any unused bits in the register have unspecified value" (see 6.8.2, 6.9). + mov w0, w0 .if $is_object // Reload the value as it may have moved. ubfx w1, wINST, #8, #4 // w1<- A |