Ignore:
Timestamp:
Mar 10, 2010, 11:53:52 PM (15 years ago)
Author:
[email protected]
Message:

Buildfix for Thumb-2 after r55684. Add branch8 and branchTest8 functions.
https://bugs.webkit.org/show_bug.cgi?id=35892

Reviewed by Gavin Barraclough.

  • assembler/ARMv7Assembler.h:

(JSC::ARMv7Assembler::):
(JSC::ARMv7Assembler::ldrb):

  • assembler/MacroAssemblerARMv7.h:

(JSC::MacroAssemblerARMv7::load8):
(JSC::MacroAssemblerARMv7::branch8):
(JSC::MacroAssemblerARMv7::branchTest8):
(JSC::MacroAssemblerARMv7::setTest8):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/assembler/MacroAssemblerARMv7.h

    r55633 r55834  
    11/*
    22 * Copyright (C) 2009 Apple Inc. All rights reserved.
     3 * Copyright (C) 2010 University of Szeged
    34 *
    45 * Redistribution and use in source and binary forms, with or without
     
    367368    }
    368369
     370    void load8(ArmAddress address, RegisterID dest)
     371    {
     372        if (address.type == ArmAddress::HasIndex)
     373            m_assembler.ldrb(dest, address.base, address.u.index, address.u.scale);
     374        else if (address.u.offset >= 0) {
     375            ARMThumbImmediate armImm = ARMThumbImmediate::makeUInt12(address.u.offset);
     376            ASSERT(armImm.isValid());
     377            m_assembler.ldrb(dest, address.base, armImm);
     378        } else {
     379            ASSERT(address.u.offset >= -255);
     380            m_assembler.ldrb(dest, address.base, address.u.offset, true, false);
     381        }
     382    }
     383
    369384    void store32(RegisterID src, ArmAddress address)
    370385    {
     
    401416        move(ImmPtr(address), addressTempRegister);
    402417        m_assembler.ldr(dest, addressTempRegister, ARMThumbImmediate::makeUInt16(0));
     418    }
     419
     420    void load8(ImplicitAddress address, RegisterID dest)
     421    {
     422        load8(setupArmAddress(address), dest);
    403423    }
    404424
     
    792812    }
    793813
     814    Jump branch8(Condition cond, RegisterID left, Imm32 right)
     815    {
     816        compare32(left, right);
     817        return Jump(makeBranch(cond));
     818    }
     819
     820    Jump branch8(Condition cond, Address left, Imm32 right)
     821    {
     822        // use addressTempRegister incase the branch8 we call uses dataTempRegister. :-/
     823        load8(left, addressTempRegister);
     824        return branch8(cond, addressTempRegister, right);
     825    }
     826
    794827    Jump branchTest32(Condition cond, RegisterID reg, RegisterID mask)
    795828    {
     
    820853        load32(address, addressTempRegister);
    821854        return branchTest32(cond, addressTempRegister, mask);
     855    }
     856
     857    Jump branchTest8(Condition cond, RegisterID reg, Imm32 mask = Imm32(-1))
     858    {
     859        ASSERT((cond == Zero) || (cond == NonZero));
     860        test32(reg, mask);
     861        return Jump(makeBranch(cond));
     862    }
     863
     864    Jump branchTest8(Condition cond, Address address, Imm32 mask = Imm32(-1))
     865    {
     866        ASSERT((cond == Zero) || (cond == NonZero));
     867        // use addressTempRegister incase the branchTest8 we call uses dataTempRegister. :-/
     868        load8(address, addressTempRegister);
     869        return branchTest8(cond, addressTempRegister, mask);
    822870    }
    823871
     
    9721020    }
    9731021
     1022    void setTest8(Condition cond, Address address, Imm32 mask, RegisterID dest)
     1023    {
     1024        load8(address, dataTempRegister);
     1025        test32(dataTempRegister, mask);
     1026        m_assembler.it(armV7Condition(cond), false);
     1027        m_assembler.mov(dest, ARMThumbImmediate::makeUInt16(1));
     1028        m_assembler.mov(dest, ARMThumbImmediate::makeUInt16(0));
     1029    }
    9741030
    9751031    DataLabel32 moveWithPatch(Imm32 imm, RegisterID dst)
Note: See TracChangeset for help on using the changeset viewer.