template <typename Result, typename Source>
void InstructionSelection::copyValue(Result result, Source source)
{
-#if CPU(X86_64)
- loadArgument(source, ScratchRegister);
- storeArgument(ScratchRegister, result);
+#ifdef VALUE_FITS_IN_REGISTER
+ // Use ReturnValueRegister as "scratch" register because loadArgument
+ // and storeArgument are functions that may need a scratch register themselves.
+ loadArgument(source, ReturnValueRegister);
+ storeArgument(ReturnValueRegister, result);
#else
loadDouble(source, FPGpr0);
storeDouble(FPGpr0, result);
static const RegisterID ContextRegister = JSC::X86Registers::r14;
static const RegisterID ReturnValueRegister = JSC::X86Registers::eax;
static const RegisterID ScratchRegister = JSC::X86Registers::r10;
- static const RegisterID ScratchRegister2 = JSC::X86Registers::r11;
static const FPRegisterID FPGpr0 = JSC::X86Registers::xmm0;
static const int RegisterSize = 8;
void storeArgument(RegisterID src, IR::Temp *temp)
{
if (temp) {
- Pointer addr = loadTempAddress(ScratchRegister2, temp);
+ Pointer addr = loadTempAddress(ScratchRegister, temp);
#ifdef VALUE_FITS_IN_REGISTER
store64(src, addr);
#else