From 79857bda92448b25707c448924040479a546e201 Mon Sep 17 00:00:00 2001 From: Leon Sha Date: Wed, 25 Nov 2009 15:24:23 +0800 Subject: [PATCH] Bug 529849 - Assertion failed: _allocator.free & rmask(r) (../../../js/src/nanojit/Assembler.cpp:433). r=gal --HG-- extra : convert_revision : 23ed78f42df2b7b1a590fc7e986e6d446ef4d3d4 --- js/src/nanojit/NativeSparc.cpp | 9 ++------- js/src/nanojit/NativeSparc.h | 7 ++++++- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/js/src/nanojit/NativeSparc.cpp b/js/src/nanojit/NativeSparc.cpp index 82d93bb33606..63768e4f3cfe 100644 --- a/js/src/nanojit/NativeSparc.cpp +++ b/js/src/nanojit/NativeSparc.cpp @@ -61,7 +61,7 @@ namespace nanojit const Register Assembler::argRegs[] = { I0, I1, I2, I3, I4, I5 }; const Register Assembler::retRegs[] = { O0 }; - const Register Assembler::savedRegs[] = { I0, I1, I2, I3, I4, I5 }; + const Register Assembler::savedRegs[] = { L1 }; static const int kLinkageAreaSize = 68; static const int kcalleeAreaSize = 80; // The max size. @@ -784,12 +784,7 @@ namespace nanojit { uint32_t a = ins->paramArg(); uint32_t kind = ins->paramKind(); - // prepResultReg(ins, rmask(argRegs[a])); - if (kind == 0) { - prepResultReg(ins, rmask(argRegs[a])); - } else { - prepResultReg(ins, rmask(savedRegs[a])); - } + prepResultReg(ins, rmask(argRegs[a])); } void Assembler::asm_int(LInsp ins) diff --git a/js/src/nanojit/NativeSparc.h b/js/src/nanojit/NativeSparc.h index d6303f884d46..fe0c3d97664e 100644 --- a/js/src/nanojit/NativeSparc.h +++ b/js/src/nanojit/NativeSparc.h @@ -173,7 +173,12 @@ namespace nanojit typedef int RegisterMask; #define _rmask_(r) (1<<(r)) - static const int NumSavedRegs = 6; + // Assembler::savedRegs[] is not needed for sparc because the + // registers are already saved automatically by "save" instruction. + // But NumSavedRegs is used as the length of savedRegs in LIR.h and Assembler.h. + // NumSavedRegs to be zero will cause a zero length array. + // So dummy L1 is added and NumSavedRegs is set to 1. + static const int NumSavedRegs = 1; static const RegisterMask SavedRegs = 1<