037cff952c
This change prevents the scaled addressing mode to be wrongly applied by the assembler. Let's illustrate with an example: __ ldr(R1, FieldAddress(R1, target::Type::nullability_offset()), kUnsignedByte); Let's assume that target::Type::nullability_offset() == 57 (it is currently 61, but will be 57 in a forthcoming CL). FieldAddress substracts 1 and builds an Address with offset 56. The default operand size passed to Address is kDoubleWord, i.e. a scaling factor of 3. Because 56 == (56 >> 3) << 3, the scaled addressing mode is chosen with a scaled offset of 7, which would be correct for a kDoubleWord access, but not for a kUnsignedByte access. It is important to specify the same operand size in the instruction as in FieldAddress: __ ldr(R1, FieldAddress(R1, target::Type::nullability_offset(), kByte), kUnsignedByte); Change-Id: I46cf2b6ac103b2acec723189c88e211567b795af Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/167900 Reviewed-by: Ryan Macnak <rmacnak@google.com> Commit-Queue: Régis Crelier <regis@google.com>