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/ARMv7Assembler.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
     
    581582        OP_BLX              = 0x4700,
    582583        OP_BX               = 0x4700,
    583         OP_LDRH_reg_T1      = 0x5A00,
    584584        OP_STR_reg_T1       = 0x5000,
    585585        OP_LDR_reg_T1       = 0x5800,
     586        OP_LDRH_reg_T1      = 0x5A00,
     587        OP_LDRB_reg_T1      = 0x5C00,
    586588        OP_STR_imm_T1       = 0x6000,
    587589        OP_LDR_imm_T1       = 0x6800,
     590        OP_LDRB_imm_T1      = 0x7800,
    588591        OP_LDRH_imm_T1      = 0x8800,
    589592        OP_STR_imm_T2       = 0x9000,
     
    630633        OP_MOVT         = 0xF2C0,
    631634        OP_NOP_T2a      = 0xF3AF,
     635        OP_LDRB_imm_T3  = 0xF810,
     636        OP_LDRB_reg_T2  = 0xF810,
    632637        OP_LDRH_reg_T2  = 0xF830,
    633638        OP_LDRH_imm_T3  = 0xF830,
     
    636641        OP_LDR_imm_T4   = 0xF850,
    637642        OP_LDR_reg_T2   = 0xF850,
     643        OP_LDRB_imm_T2  = 0xF890,
    638644        OP_LDRH_imm_T2  = 0xF8B0,
    639645        OP_STR_imm_T3   = 0xF8C0,
     
    10771083        else
    10781084            m_formatter.twoWordOp12Reg4FourFours(OP_LDRH_reg_T2, rn, FourFours(rt, 0, shift, rm));
     1085    }
     1086
     1087    void ldrb(RegisterID rt, RegisterID rn, ARMThumbImmediate imm)
     1088    {
     1089        ASSERT(rn != ARMRegisters::pc); // LDR (literal)
     1090        ASSERT(imm.isUInt12());
     1091
     1092        if (!((rt | rn) & 8) && imm.isUInt5())
     1093            m_formatter.oneWordOp5Imm5Reg3Reg3(OP_LDRB_imm_T1, imm.getUInt5(), rn, rt);
     1094        else
     1095            m_formatter.twoWordOp12Reg4Reg4Imm12(OP_LDRB_imm_T2, rn, rt, imm.getUInt12());
     1096    }
     1097
     1098    void ldrb(RegisterID rt, RegisterID rn, int offset, bool index, bool wback)
     1099    {
     1100        ASSERT(rt != ARMRegisters::pc);
     1101        ASSERT(rn != ARMRegisters::pc);
     1102        ASSERT(index || wback);
     1103        ASSERT(!wback | (rt != rn));
     1104
     1105        bool add = true;
     1106        if (offset < 0) {
     1107            add = false;
     1108            offset = -offset;
     1109        }
     1110
     1111        ASSERT(!(offset & ~0xff));
     1112
     1113        offset |= (wback << 8);
     1114        offset |= (add   << 9);
     1115        offset |= (index << 10);
     1116        offset |= (1 << 11);
     1117
     1118        m_formatter.twoWordOp12Reg4Reg4Imm12(OP_LDRB_imm_T3, rn, rt, offset);
     1119    }
     1120
     1121    void ldrb(RegisterID rt, RegisterID rn, RegisterID rm, unsigned shift = 0)
     1122    {
     1123        ASSERT(rn != ARMRegisters::pc); // LDR (literal)
     1124        ASSERT(!BadReg(rm));
     1125        ASSERT(shift <= 3);
     1126
     1127        if (!shift && !((rt | rn | rm) & 8))
     1128            m_formatter.oneWordOp7Reg3Reg3Reg3(OP_LDRB_reg_T1, rm, rn, rt);
     1129        else
     1130            m_formatter.twoWordOp12Reg4FourFours(OP_LDRB_reg_T2, rn, FourFours(rt, 0, shift, rm));
    10791131    }
    10801132
Note: See TracChangeset for help on using the changeset viewer.