Fix release of a QRegisters within a ScratchRegisterScope.
Test: ./tools/test.py
Change-Id: I11107d3a7c19eaf31a1dd8ad512c67d4600b7930
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();