Changeset 63228 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
Jul 13, 2010, 11:56:18 AM (15 years ago)
Author:
[email protected]
Message:

Fix the constant encoding in data transfer instructions on ARM
https://bugs.webkit.org/show_bug.cgi?id=42166

Reviewed by Gavin Barraclough.

The getImm function is designed to produce modified immediate constant
for data processing instructions. It should not be used to encode
any constant for data transfer. In the current situation there is no
way to use any immediate constant for data transfer. So, the moveImm
function is the desired method to pass the offset value to the data
transfer instructions.

Reported by Jacob Bramley.

  • assembler/ARMAssembler.cpp:

(JSC::ARMAssembler::dataTransfer32):

  • assembler/MacroAssemblerARM.h:

(JSC::MacroAssemblerARM::call32):

Location:
trunk/JavaScriptCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r63120 r63228  
     12010-07-13  Gabor Loki  <[email protected]>
     2
     3        Reviewed by Gavin Barraclough.
     4
     5        Fix the constant encoding in data transfer instructions on ARM
     6        https://bugs.webkit.org/show_bug.cgi?id=42166
     7
     8        The getImm function is designed to produce modified immediate constant
     9        for data processing instructions. It should not be used to encode
     10        any constant for data transfer. In the current situation there is no
     11        way to use any immediate constant for data transfer. So, the moveImm
     12        function is the desired method to pass the offset value to the data
     13        transfer instructions.
     14
     15        Reported by Jacob Bramley.
     16
     17        * assembler/ARMAssembler.cpp:
     18        (JSC::ARMAssembler::dataTransfer32):
     19        * assembler/MacroAssemblerARM.h:
     20        (JSC::MacroAssemblerARM::call32):
     21
    1222010-07-09  Darin Adler  <[email protected]>
    223
  • trunk/JavaScriptCore/assembler/ARMAssembler.cpp

    r58091 r63228  
    273273            dtr_u(isLoad, srcDst, ARMRegisters::S0, (offset & 0xfff) | transferFlag);
    274274        } else {
    275             ARMWord reg = getImm(offset, ARMRegisters::S0);
    276             dtr_ur(isLoad, srcDst, base, reg | transferFlag);
     275            moveImm(offset, ARMRegisters::S0);
     276            dtr_ur(isLoad, srcDst, base, ARMRegisters::S0 | transferFlag);
    277277        }
    278278    } else {
     
    284284            dtr_d(isLoad, srcDst, ARMRegisters::S0, (offset & 0xfff) | transferFlag);
    285285        } else {
    286             ARMWord reg = getImm(offset, ARMRegisters::S0);
    287             dtr_dr(isLoad, srcDst, base, reg | transferFlag);
     286            moveImm(offset, ARMRegisters::S0);
     287            dtr_dr(isLoad, srcDst, base, ARMRegisters::S0 | transferFlag);
    288288        }
    289289    }
  • trunk/JavaScriptCore/assembler/MacroAssemblerARM.h

    r62306 r63228  
    957957                m_assembler.dtr_u(true, targetReg, tmpReg, offset & 0xfff);
    958958            } else {
    959                 ARMWord reg = m_assembler.getImm(offset, tmpReg);
     959                m_assembler.moveImm(offset, tmpReg);
    960960                prepareCall();
    961                 m_assembler.dtr_ur(true, targetReg, base, reg);
     961                m_assembler.dtr_ur(true, targetReg, base, tmpReg);
    962962            }
    963963        } else  {
     
    971971                m_assembler.dtr_d(true, targetReg, tmpReg, offset & 0xfff);
    972972            } else {
    973                 ARMWord reg = m_assembler.getImm(offset, tmpReg);
     973                m_assembler.moveImm(offset, tmpReg);
    974974                prepareCall();
    975                 m_assembler.dtr_dr(true, targetReg, base, reg);
     975                m_assembler.dtr_dr(true, targetReg, base, tmpReg);
    976976            }
    977977        }
Note: See TracChangeset for help on using the changeset viewer.