Fix release of a QRegisters within a ScratchRegisterScope. am: 2da09a48dc am: 933047d53c am: 5cb380c158
am: 04f21b66b1
Change-Id: Ib36b95199d2897c19cb8aaa39ed95ee7c3a78ea7
diff --git a/src/aarch64/macro-assembler-aarch64.cc b/src/aarch64/macro-assembler-aarch64.cc
index 9973e2e..7316887 100644
--- a/src/aarch64/macro-assembler-aarch64.cc
+++ b/src/aarch64/macro-assembler-aarch64.cc
@@ -2697,7 +2697,7 @@
VIXL_ASSERT(masm_ != NULL);
if (reg.IsRegister()) {
ReleaseByCode(masm_->GetScratchRegisterList(), reg.GetCode());
- } else if (reg.IsFPRegister()) {
+ } else if (reg.IsVRegister()) {
ReleaseByCode(masm_->GetScratchFPRegisterList(), reg.GetCode());
} else {
VIXL_ASSERT(reg.IsNone());
diff --git a/test/aarch64/test-assembler-aarch64.cc b/test/aarch64/test-assembler-aarch64.cc
index 50e7800..2d618e9 100644
--- a/test/aarch64/test-assembler-aarch64.cc
+++ b/test/aarch64/test-assembler-aarch64.cc
@@ -23276,6 +23276,25 @@
masm.FinalizeCode();
}
+TEST(scratch_scope_basic_v) {
+ MacroAssembler masm;
+
+ {
+ UseScratchRegisterScope temps(&masm);
+ VRegister temp = temps.AcquireVRegisterOfSize(kQRegSize);
+ VIXL_CHECK(temp.Aliases(v31));
+ }
+ {
+ UseScratchRegisterScope temps(&masm);
+ VRegister temp = temps.AcquireVRegisterOfSize(kDRegSize);
+ VIXL_CHECK(temp.Aliases(v31));
+ }
+ {
+ UseScratchRegisterScope temps(&masm);
+ VRegister temp = temps.AcquireVRegisterOfSize(kSRegSize);
+ VIXL_CHECK(temp.Aliases(v31));
+ }
+}
TEST(static_register_types) {
SETUP();