Changeset 40562 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
Feb 3, 2009, 6:02:32 PM (16 years ago)
Author:
[email protected]
Message:

2009-02-03 Gavin Barraclough <[email protected]>

Reviewed by Geoff Garen.

https://bugs.webkit.org/show_bug.cgi?id=23715

Simplify MacroAssembler interface, by combining comparison methods.
Seprate operations are combined as follows:

jz32/jnz32/jzPtr/jnzPtr -> branchTest32/branchTestPtr,
j*(Add|Mul|Sub)32/j*(Add|Mul|Sub)Ptr -> branch(Add|Mul|Sub)32/branch(Add|Mul|Sub)Ptr
j*32/j*Ptr (all other two op combparisons) -> branch32/brnachPtr
set*32 -> set32

Also, represent the Scale of BaseIndex addresses as a plain enum (0,1,2,3),
instead of as multiplicands (1,2,4,8).

This patch singificantly reduces replication of code, and increases functionality supported
by the MacroAssembler. No performance impact.

  • assembler/MacroAssembler.h: (JSC::MacroAssembler::): (JSC::MacroAssembler::branchPtr): (JSC::MacroAssembler::branchPtrWithPatch): (JSC::MacroAssembler::branch32): (JSC::MacroAssembler::branch16): (JSC::MacroAssembler::branchTestPtr): (JSC::MacroAssembler::branchTest32): (JSC::MacroAssembler::branchAddPtr): (JSC::MacroAssembler::branchAdd32): (JSC::MacroAssembler::branchMul32): (JSC::MacroAssembler::branchSubPtr): (JSC::MacroAssembler::branchSub32): (JSC::MacroAssembler::set32): (JSC::MacroAssembler::setTest32):
  • assembler/X86Assembler.h: (JSC::X86Assembler::): (JSC::X86Assembler::jccRel32): (JSC::X86Assembler::setccOpcode): (JSC::X86Assembler::cmpq_mr): (JSC::X86Assembler::setcc_r): (JSC::X86Assembler::sete_r): (JSC::X86Assembler::setne_r): (JSC::X86Assembler::jne): (JSC::X86Assembler::je): (JSC::X86Assembler::jl): (JSC::X86Assembler::jb): (JSC::X86Assembler::jle): (JSC::X86Assembler::jbe): (JSC::X86Assembler::jge): (JSC::X86Assembler::jg): (JSC::X86Assembler::ja): (JSC::X86Assembler::jae): (JSC::X86Assembler::jo): (JSC::X86Assembler::jp): (JSC::X86Assembler::js): (JSC::X86Assembler::jcc): (JSC::X86Assembler::X86InstructionFormatter::putModRmSib):
  • jit/JIT.cpp: (JSC::JIT::compileOpStrictEq): (JSC::JIT::emitSlowScriptCheck): (JSC::JIT::privateCompileMainPass): (JSC::JIT::privateCompileSlowCases): (JSC::JIT::privateCompile): (JSC::JIT::privateCompileCTIMachineTrampolines):
  • jit/JITArithmetic.cpp: (JSC::JIT::compileFastArith_op_lshift): (JSC::JIT::compileFastArith_op_mod): (JSC::JIT::compileFastArith_op_post_inc): (JSC::JIT::compileFastArith_op_post_dec): (JSC::JIT::compileFastArith_op_pre_inc): (JSC::JIT::compileFastArith_op_pre_dec): (JSC::JIT::compileBinaryArithOp): (JSC::JIT::compileFastArith_op_add): (JSC::JIT::compileFastArith_op_mul):
  • jit/JITCall.cpp: (JSC::JIT::compileOpCall): (JSC::JIT::compileOpCallSlowCase):
  • jit/JITInlineMethods.h: (JSC::JIT::checkStructure): (JSC::JIT::emitJumpIfJSCell): (JSC::JIT::emitJumpIfNotJSCell): (JSC::JIT::emitJumpIfImmediateNumber): (JSC::JIT::emitJumpIfNotImmediateNumber): (JSC::JIT::emitJumpIfImmediateInteger): (JSC::JIT::emitJumpIfNotImmediateInteger): (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
  • jit/JITPropertyAccess.cpp: (JSC::JIT::compileGetByIdHotPath): (JSC::JIT::compilePutByIdHotPath): (JSC::JIT::privateCompilePutByIdTransition): (JSC::JIT::privateCompilePatchGetArrayLength): (JSC::JIT::privateCompileGetByIdProto): (JSC::JIT::privateCompileGetByIdProtoList): (JSC::JIT::privateCompileGetByIdChainList): (JSC::JIT::privateCompileGetByIdChain):
  • runtime/RegExp.cpp: (JSC::RegExp::match):
  • wrec/WRECGenerator.cpp: (JSC::WREC::Generator::generateEnter): (JSC::WREC::Generator::generateIncrementIndex): (JSC::WREC::Generator::generateLoadCharacter): (JSC::WREC::Generator::generateJumpIfNotEndOfInput): (JSC::WREC::Generator::generateBackreferenceQuantifier): (JSC::WREC::Generator::generateNonGreedyQuantifier): (JSC::WREC::Generator::generateGreedyQuantifier): (JSC::WREC::Generator::generatePatternCharacterPair): (JSC::WREC::Generator::generatePatternCharacter): (JSC::WREC::Generator::generateCharacterClassInvertedRange): (JSC::WREC::Generator::generateCharacterClassInverted): (JSC::WREC::Generator::generateAssertionBOL): (JSC::WREC::Generator::generateAssertionEOL): (JSC::WREC::Generator::generateAssertionWordBoundary): (JSC::WREC::Generator::generateBackreference):
Location:
trunk/JavaScriptCore
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r40561 r40562  
     12009-02-03  Gavin Barraclough  <[email protected]>
     2
     3        Reviewed by Geoff Garen.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=23715
     6
     7        Simplify MacroAssembler interface, by combining comparison methods.
     8        Seprate operations are combined as follows:
     9            jz32/jnz32/jzPtr/jnzPtr -> branchTest32/branchTestPtr,
     10            j*(Add|Mul|Sub)32/j*(Add|Mul|Sub)Ptr -> branch(Add|Mul|Sub)32/branch(Add|Mul|Sub)Ptr
     11            j*32/j*Ptr (all other two op combparisons) -> branch32/brnachPtr
     12            set*32 -> set32
     13
     14        Also, represent the Scale of BaseIndex addresses as a plain enum (0,1,2,3),
     15        instead of as multiplicands (1,2,4,8).
     16
     17        This patch singificantly reduces replication of code, and increases functionality supported
     18        by the MacroAssembler.  No performance impact.
     19
     20        * assembler/MacroAssembler.h:
     21        (JSC::MacroAssembler::):
     22        (JSC::MacroAssembler::branchPtr):
     23        (JSC::MacroAssembler::branchPtrWithPatch):
     24        (JSC::MacroAssembler::branch32):
     25        (JSC::MacroAssembler::branch16):
     26        (JSC::MacroAssembler::branchTestPtr):
     27        (JSC::MacroAssembler::branchTest32):
     28        (JSC::MacroAssembler::branchAddPtr):
     29        (JSC::MacroAssembler::branchAdd32):
     30        (JSC::MacroAssembler::branchMul32):
     31        (JSC::MacroAssembler::branchSubPtr):
     32        (JSC::MacroAssembler::branchSub32):
     33        (JSC::MacroAssembler::set32):
     34        (JSC::MacroAssembler::setTest32):
     35        * assembler/X86Assembler.h:
     36        (JSC::X86Assembler::):
     37        (JSC::X86Assembler::jccRel32):
     38        (JSC::X86Assembler::setccOpcode):
     39        (JSC::X86Assembler::cmpq_mr):
     40        (JSC::X86Assembler::setcc_r):
     41        (JSC::X86Assembler::sete_r):
     42        (JSC::X86Assembler::setne_r):
     43        (JSC::X86Assembler::jne):
     44        (JSC::X86Assembler::je):
     45        (JSC::X86Assembler::jl):
     46        (JSC::X86Assembler::jb):
     47        (JSC::X86Assembler::jle):
     48        (JSC::X86Assembler::jbe):
     49        (JSC::X86Assembler::jge):
     50        (JSC::X86Assembler::jg):
     51        (JSC::X86Assembler::ja):
     52        (JSC::X86Assembler::jae):
     53        (JSC::X86Assembler::jo):
     54        (JSC::X86Assembler::jp):
     55        (JSC::X86Assembler::js):
     56        (JSC::X86Assembler::jcc):
     57        (JSC::X86Assembler::X86InstructionFormatter::putModRmSib):
     58        * jit/JIT.cpp:
     59        (JSC::JIT::compileOpStrictEq):
     60        (JSC::JIT::emitSlowScriptCheck):
     61        (JSC::JIT::privateCompileMainPass):
     62        (JSC::JIT::privateCompileSlowCases):
     63        (JSC::JIT::privateCompile):
     64        (JSC::JIT::privateCompileCTIMachineTrampolines):
     65        * jit/JITArithmetic.cpp:
     66        (JSC::JIT::compileFastArith_op_lshift):
     67        (JSC::JIT::compileFastArith_op_mod):
     68        (JSC::JIT::compileFastArith_op_post_inc):
     69        (JSC::JIT::compileFastArith_op_post_dec):
     70        (JSC::JIT::compileFastArith_op_pre_inc):
     71        (JSC::JIT::compileFastArith_op_pre_dec):
     72        (JSC::JIT::compileBinaryArithOp):
     73        (JSC::JIT::compileFastArith_op_add):
     74        (JSC::JIT::compileFastArith_op_mul):
     75        * jit/JITCall.cpp:
     76        (JSC::JIT::compileOpCall):
     77        (JSC::JIT::compileOpCallSlowCase):
     78        * jit/JITInlineMethods.h:
     79        (JSC::JIT::checkStructure):
     80        (JSC::JIT::emitJumpIfJSCell):
     81        (JSC::JIT::emitJumpIfNotJSCell):
     82        (JSC::JIT::emitJumpIfImmediateNumber):
     83        (JSC::JIT::emitJumpIfNotImmediateNumber):
     84        (JSC::JIT::emitJumpIfImmediateInteger):
     85        (JSC::JIT::emitJumpIfNotImmediateInteger):
     86        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
     87        * jit/JITPropertyAccess.cpp:
     88        (JSC::JIT::compileGetByIdHotPath):
     89        (JSC::JIT::compilePutByIdHotPath):
     90        (JSC::JIT::privateCompilePutByIdTransition):
     91        (JSC::JIT::privateCompilePatchGetArrayLength):
     92        (JSC::JIT::privateCompileGetByIdProto):
     93        (JSC::JIT::privateCompileGetByIdProtoList):
     94        (JSC::JIT::privateCompileGetByIdChainList):
     95        (JSC::JIT::privateCompileGetByIdChain):
     96        * runtime/RegExp.cpp:
     97        (JSC::RegExp::match):
     98        * wrec/WRECGenerator.cpp:
     99        (JSC::WREC::Generator::generateEnter):
     100        (JSC::WREC::Generator::generateIncrementIndex):
     101        (JSC::WREC::Generator::generateLoadCharacter):
     102        (JSC::WREC::Generator::generateJumpIfNotEndOfInput):
     103        (JSC::WREC::Generator::generateBackreferenceQuantifier):
     104        (JSC::WREC::Generator::generateNonGreedyQuantifier):
     105        (JSC::WREC::Generator::generateGreedyQuantifier):
     106        (JSC::WREC::Generator::generatePatternCharacterPair):
     107        (JSC::WREC::Generator::generatePatternCharacter):
     108        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
     109        (JSC::WREC::Generator::generateCharacterClassInverted):
     110        (JSC::WREC::Generator::generateAssertionBOL):
     111        (JSC::WREC::Generator::generateAssertionEOL):
     112        (JSC::WREC::Generator::generateAssertionWordBoundary):
     113        (JSC::WREC::Generator::generateBackreference):
     114
    11152009-02-03  David Hyatt  <[email protected]>
    2116
  • trunk/JavaScriptCore/assembler/MacroAssembler.h

    r40004 r40562  
    4848    // Note: do not rely on values in this enum, these will change (to 0..3).
    4949    enum Scale {
    50         TimesOne = 1,
    51         TimesTwo = 2,
    52         TimesFour = 4,
    53         TimesEight = 8,
     50        TimesOne,
     51        TimesTwo,
     52        TimesFour,
     53        TimesEight,
    5454#if PLATFORM(X86)
    5555        ScalePtr = TimesFour
     
    5959#endif
    6060    };
     61
     62    typedef X86Assembler::Condition Condition;
     63    static const Condition Equal = X86Assembler::ConditionE;
     64    static const Condition NotEqual = X86Assembler::ConditionNE;
     65    static const Condition Above = X86Assembler::ConditionA;
     66    static const Condition AboveOrEqual = X86Assembler::ConditionAE;
     67    static const Condition Below = X86Assembler::ConditionB;
     68    static const Condition BelowOrEqual = X86Assembler::ConditionBE;
     69    static const Condition GreaterThan = X86Assembler::ConditionG;
     70    static const Condition GreaterThanOrEqual = X86Assembler::ConditionGE;
     71    static const Condition LessThan = X86Assembler::ConditionL;
     72    static const Condition LessThanOrEqual = X86Assembler::ConditionLE;
     73    static const Condition Overflow = X86Assembler::ConditionO;
     74    static const Condition Zero = X86Assembler::ConditionE;
     75    static const Condition NonZero = X86Assembler::ConditionNE;
    6176
    6277    MacroAssembler()
     
    10931108    // an optional second operand of a mask under which to perform the test.
    10941109
    1095 private:
    1096     void compareImm32ForBranch(RegisterID left, int32_t right)
    1097     {
    1098         m_assembler.cmpl_ir(right, left);
    1099     }
    1100 
    1101     void compareImm32ForBranchEquality(RegisterID reg, int32_t imm)
    1102     {
    1103         if (!imm)
    1104             m_assembler.testl_rr(reg, reg);
     1110public:
     1111    Jump branchPtr(Condition cond, RegisterID left, RegisterID right)
     1112    {
     1113#if PLATFORM(X86_64)
     1114        m_assembler.cmpq_rr(right, left);
     1115        return Jump(m_assembler.jCC(cond));
     1116#else
     1117        return branch32(cond, left, right);
     1118#endif
     1119    }
     1120
     1121    Jump branchPtr(Condition cond, RegisterID left, ImmPtr right)
     1122    {
     1123#if PLATFORM(X86_64)
     1124        intptr_t imm = right.asIntptr();
     1125        if (CAN_SIGN_EXTEND_32_64(imm)) {
     1126            if (!imm)
     1127                m_assembler.testq_rr(left, left);
     1128            else
     1129                m_assembler.cmpq_ir(imm, left);
     1130            return Jump(m_assembler.jCC(cond));
     1131        } else {
     1132            move(right, scratchRegister);
     1133            return branchPtr(cond, left, scratchRegister);
     1134        }
     1135#else
     1136        return branch32(cond, left, Imm32(right));
     1137#endif
     1138    }
     1139
     1140    Jump branchPtr(Condition cond, RegisterID left, Address right)
     1141    {
     1142#if PLATFORM(X86_64)
     1143        m_assembler.cmpq_mr(right.offset, right.base, left);
     1144        return Jump(m_assembler.jCC(cond));
     1145#else
     1146        return branch32(cond, left, right);
     1147#endif
     1148    }
     1149
     1150    Jump branchPtr(Condition cond, AbsoluteAddress left, RegisterID right)
     1151    {
     1152#if PLATFORM(X86_64)
     1153        move(ImmPtr(left.m_ptr), scratchRegister);
     1154        return branchPtr(cond, Address(scratchRegister), right);
     1155#else
     1156        m_assembler.cmpl_rm(right, left.m_ptr);
     1157        return Jump(m_assembler.jCC(cond));
     1158#endif
     1159    }
     1160
     1161    Jump branchPtr(Condition cond, Address left, RegisterID right)
     1162    {
     1163#if PLATFORM(X86_64)
     1164        m_assembler.cmpq_rm(right, left.offset, left.base);
     1165        return Jump(m_assembler.jCC(cond));
     1166#else
     1167        return branch32(cond, left, right);
     1168#endif
     1169    }
     1170
     1171    Jump branchPtr(Condition cond, Address left, ImmPtr right)
     1172    {
     1173#if PLATFORM(X86_64)
     1174        move(right, scratchRegister);
     1175        return branchPtr(cond, left, scratchRegister);
     1176#else
     1177        return branch32(cond, left, Imm32(right));
     1178#endif
     1179    }
     1180
     1181#if !PLATFORM(X86_64)
     1182    Jump branchPtr(Condition cond, AbsoluteAddress left, ImmPtr right)
     1183    {
     1184        m_assembler.cmpl_im(right.asIntptr(), left.m_ptr);
     1185        return Jump(m_assembler.jCC(cond));
     1186    }
     1187#endif
     1188
     1189    Jump branchPtrWithPatch(Condition cond, RegisterID left, DataLabelPtr& dataLabel, ImmPtr initialRightValue = ImmPtr(0))
     1190    {
     1191#if PLATFORM(X86_64)
     1192        m_assembler.movq_i64r(initialRightValue.asIntptr(), scratchRegister);
     1193        dataLabel = DataLabelPtr(this);
     1194        return branchPtr(cond, left, scratchRegister);
     1195#else
     1196        m_assembler.cmpl_ir_force32(initialRightValue.asIntptr(), left);
     1197        dataLabel = DataLabelPtr(this);
     1198        return Jump(m_assembler.jCC(cond));
     1199#endif
     1200    }
     1201
     1202    Jump branchPtrWithPatch(Condition cond, Address left, DataLabelPtr& dataLabel, ImmPtr initialRightValue = ImmPtr(0))
     1203    {
     1204#if PLATFORM(X86_64)
     1205        m_assembler.movq_i64r(initialRightValue.asIntptr(), scratchRegister);
     1206        dataLabel = DataLabelPtr(this);
     1207        return branchPtr(cond, left, scratchRegister);
     1208#else
     1209        m_assembler.cmpl_im_force32(initialRightValue.asIntptr(), left.offset, left.base);
     1210        dataLabel = DataLabelPtr(this);
     1211        return Jump(m_assembler.jCC(cond));
     1212#endif
     1213    }
     1214
     1215    Jump branch32(Condition cond, RegisterID left, RegisterID right)
     1216    {
     1217        m_assembler.cmpl_rr(right, left);
     1218        return Jump(m_assembler.jCC(cond));
     1219    }
     1220
     1221    Jump branch32(Condition cond, RegisterID left, Imm32 right)
     1222    {
     1223        if (((cond == Equal) || (cond == NotEqual)) && !right.m_value)
     1224            m_assembler.testl_rr(left, left);
    11051225        else
    1106             m_assembler.cmpl_ir(imm, reg);
    1107     }
    1108 
    1109     void compareImm32ForBranchEquality(Address address, int32_t imm)
    1110     {
    1111         m_assembler.cmpl_im(imm, address.offset, address.base);
    1112     }
    1113 
    1114     void testImm32(RegisterID reg, Imm32 mask)
    1115     {
     1226            m_assembler.cmpl_ir(right.m_value, left);
     1227        return Jump(m_assembler.jCC(cond));
     1228    }
     1229   
     1230    Jump branch32(Condition cond, RegisterID left, Address right)
     1231    {
     1232        m_assembler.cmpl_mr(right.offset, right.base, left);
     1233        return Jump(m_assembler.jCC(cond));
     1234    }
     1235   
     1236    Jump branch32(Condition cond, Address left, RegisterID right)
     1237    {
     1238        m_assembler.cmpl_rm(right, left.offset, left.base);
     1239        return Jump(m_assembler.jCC(cond));
     1240    }
     1241   
     1242    Jump branch32(Condition cond, Address left, Imm32 right)
     1243    {
     1244        m_assembler.cmpl_im(right.m_value, left.offset, left.base);
     1245        return Jump(m_assembler.jCC(cond));
     1246    }
     1247
     1248    Jump branch16(Condition cond, BaseIndex left, RegisterID right)
     1249    {
     1250        m_assembler.cmpw_rm(right, left.offset, left.base, left.index, left.scale);
     1251        return Jump(m_assembler.jCC(cond));
     1252    }
     1253
     1254    Jump branchTestPtr(Condition cond, RegisterID reg, RegisterID mask)
     1255    {
     1256#if PLATFORM(X86_64)
     1257        m_assembler.testq_rr(reg, mask);
     1258        return Jump(m_assembler.jCC(cond));
     1259#else
     1260        return branchTest32(cond, reg, mask);
     1261#endif
     1262    }
     1263
     1264    Jump branchTestPtr(Condition cond, RegisterID reg, Imm32 mask = Imm32(-1))
     1265    {
     1266#if PLATFORM(X86_64)
     1267        // if we are only interested in the low seven bits, this can be tested with a testb
     1268        if (mask.m_value == -1)
     1269            m_assembler.testq_rr(reg, reg);
     1270        else if ((mask.m_value & ~0x7f) == 0)
     1271            m_assembler.testb_i8r(mask.m_value, reg);
     1272        else
     1273            m_assembler.testq_i32r(mask.m_value, reg);
     1274        return Jump(m_assembler.jCC(cond));
     1275#else
     1276        return branchTest32(cond, reg, mask);
     1277#endif
     1278    }
     1279
     1280    Jump branchTestPtr(Condition cond, Address address, Imm32 mask = Imm32(-1))
     1281    {
     1282#if PLATFORM(X86_64)
     1283        if (mask.m_value == -1)
     1284            m_assembler.cmpq_im(0, address.offset, address.base);
     1285        else
     1286            m_assembler.testq_i32m(mask.m_value, address.offset, address.base);
     1287        return Jump(m_assembler.jCC(cond));
     1288#else
     1289        return branchTest32(cond, address, mask);
     1290#endif
     1291    }
     1292
     1293    Jump branchTestPtr(Condition cond, BaseIndex address, Imm32 mask = Imm32(-1))
     1294    {
     1295#if PLATFORM(X86_64)
     1296        if (mask.m_value == -1)
     1297            m_assembler.cmpq_im(0, address.offset, address.base, address.index, address.scale);
     1298        else
     1299            m_assembler.testq_i32m(mask.m_value, address.offset, address.base, address.index, address.scale);
     1300        return Jump(m_assembler.jCC(cond));
     1301#else
     1302        return branchTest32(cond, address, mask);
     1303#endif
     1304    }
     1305
     1306    Jump branchTest32(Condition cond, RegisterID reg, RegisterID mask)
     1307    {
     1308        ASSERT((cond == Zero) || (cond == NonZero));
     1309        m_assembler.testl_rr(reg, mask);
     1310        return Jump(m_assembler.jCC(cond));
     1311    }
     1312
     1313    Jump branchTest32(Condition cond, RegisterID reg, Imm32 mask = Imm32(-1))
     1314    {
     1315        ASSERT((cond == Zero) || (cond == NonZero));
    11161316        // if we are only interested in the low seven bits, this can be tested with a testb
    11171317        if (mask.m_value == -1)
     
    11211321        else
    11221322            m_assembler.testl_i32r(mask.m_value, reg);
    1123     }
    1124 
    1125     void testImm32(Address address, Imm32 mask)
    1126     {
     1323        return Jump(m_assembler.jCC(cond));
     1324    }
     1325
     1326    Jump branchTest32(Condition cond, Address address, Imm32 mask = Imm32(-1))
     1327    {
     1328        ASSERT((cond == Zero) || (cond == NonZero));
    11271329        if (mask.m_value == -1)
    11281330            m_assembler.cmpl_im(0, address.offset, address.base);
    11291331        else
    11301332            m_assembler.testl_i32m(mask.m_value, address.offset, address.base);
    1131     }
    1132 
    1133     void testImm32(BaseIndex address, Imm32 mask)
    1134     {
     1333        return Jump(m_assembler.jCC(cond));
     1334    }
     1335
     1336    Jump branchTest32(Condition cond, BaseIndex address, Imm32 mask = Imm32(-1))
     1337    {
     1338        ASSERT((cond == Zero) || (cond == NonZero));
    11351339        if (mask.m_value == -1)
    11361340            m_assembler.cmpl_im(0, address.offset, address.base, address.index, address.scale);
    11371341        else
    11381342            m_assembler.testl_i32m(mask.m_value, address.offset, address.base, address.index, address.scale);
    1139     }
    1140 
    1141 #if PLATFORM(X86_64)
    1142     void compareImm64ForBranch(RegisterID left, int32_t right)
    1143     {
    1144         m_assembler.cmpq_ir(right, left);
    1145     }
    1146 
    1147     void compareImm64ForBranchEquality(RegisterID reg, int32_t imm)
    1148     {
    1149         if (!imm)
    1150             m_assembler.testq_rr(reg, reg);
    1151         else
    1152             m_assembler.cmpq_ir(imm, reg);
    1153     }
    1154 
    1155     void testImm64(RegisterID reg, Imm32 mask)
    1156     {
    1157         // if we are only interested in the low seven bits, this can be tested with a testb
    1158         if (mask.m_value == -1)
    1159             m_assembler.testq_rr(reg, reg);
    1160         else if ((mask.m_value & ~0x7f) == 0)
    1161             m_assembler.testb_i8r(mask.m_value, reg);
    1162         else
    1163             m_assembler.testq_i32r(mask.m_value, reg);
    1164     }
    1165 
    1166     void testImm64(Address address, Imm32 mask)
    1167     {
    1168         if (mask.m_value == -1)
    1169             m_assembler.cmpq_im(0, address.offset, address.base);
    1170         else
    1171             m_assembler.testq_i32m(mask.m_value, address.offset, address.base);
    1172     }
    1173 
    1174     void testImm64(BaseIndex address, Imm32 mask)
    1175     {
    1176         if (mask.m_value == -1)
    1177             m_assembler.cmpq_im(0, address.offset, address.base, address.index, address.scale);
    1178         else
    1179             m_assembler.testq_i32m(mask.m_value, address.offset, address.base, address.index, address.scale);
    1180     }
    1181 #endif
    1182 
    1183 public:
    1184     Jump ja32(RegisterID left, Imm32 right)
    1185     {
    1186         compareImm32ForBranch(left, right.m_value);
    1187         return Jump(m_assembler.ja());
    1188     }
    1189    
    1190     Jump jaePtr(RegisterID left, RegisterID right)
    1191     {
    1192 #if PLATFORM(X86_64)
    1193         m_assembler.cmpq_rr(right, left);
    1194         return Jump(m_assembler.jae());
    1195 #else
    1196         return jae32(left, right);
    1197 #endif
    1198     }
    1199 
    1200     Jump jaePtr(RegisterID reg, ImmPtr ptr)
    1201     {
    1202 #if PLATFORM(X86_64)
    1203         intptr_t imm = ptr.asIntptr();
    1204         if (CAN_SIGN_EXTEND_32_64(imm)) {
    1205             compareImm64ForBranch(reg, imm);
    1206             return Jump(m_assembler.jae());
    1207         } else {
    1208             move(ptr, scratchRegister);
    1209             return jaePtr(reg, scratchRegister);
    1210         }
    1211 #else
    1212         return jae32(reg, Imm32(ptr));
    1213 #endif
    1214     }
    1215 
    1216     Jump jae32(RegisterID left, RegisterID right)
    1217     {
    1218         m_assembler.cmpl_rr(right, left);
    1219         return Jump(m_assembler.jae());
    1220     }
    1221 
    1222     Jump jae32(RegisterID left, Imm32 right)
    1223     {
    1224         compareImm32ForBranch(left, right.m_value);
    1225         return Jump(m_assembler.jae());
    1226     }
    1227    
    1228     Jump jae32(RegisterID left, Address right)
    1229     {
    1230         m_assembler.cmpl_mr(right.offset, right.base, left);
    1231         return Jump(m_assembler.jae());
    1232     }
    1233    
    1234     Jump jae32(Address left, RegisterID right)
    1235     {
    1236         m_assembler.cmpl_rm(right, left.offset, left.base);
    1237         return Jump(m_assembler.jae());
    1238     }
    1239    
    1240     Jump jbPtr(RegisterID left, RegisterID right)
    1241     {
    1242 #if PLATFORM(X86_64)
    1243         m_assembler.cmpq_rr(right, left);
    1244         return Jump(m_assembler.jb());
    1245 #else
    1246         return jb32(left, right);
    1247 #endif
    1248     }
    1249 
    1250     Jump jbPtr(RegisterID reg, ImmPtr ptr)
    1251     {
    1252 #if PLATFORM(X86_64)
    1253         intptr_t imm = ptr.asIntptr();
    1254         if (CAN_SIGN_EXTEND_32_64(imm)) {
    1255             compareImm64ForBranch(reg, imm);
    1256             return Jump(m_assembler.jb());
    1257         } else {
    1258             move(ptr, scratchRegister);
    1259             return jbPtr(reg, scratchRegister);
    1260         }
    1261 #else
    1262         return jb32(reg, Imm32(ptr));
    1263 #endif
    1264     }
    1265 
    1266     Jump jb32(RegisterID left, RegisterID right)
    1267     {
    1268         m_assembler.cmpl_rr(right, left);
    1269         return Jump(m_assembler.jb());
    1270     }
    1271 
    1272     Jump jb32(RegisterID left, Imm32 right)
    1273     {
    1274         compareImm32ForBranch(left, right.m_value);
    1275         return Jump(m_assembler.jb());
    1276     }
    1277    
    1278     Jump jb32(RegisterID left, Address right)
    1279     {
    1280         m_assembler.cmpl_mr(right.offset, right.base, left);
    1281         return Jump(m_assembler.jb());
    1282     }
    1283    
    1284     Jump jePtr(RegisterID op1, RegisterID op2)
    1285     {
    1286 #if PLATFORM(X86_64)
    1287         m_assembler.cmpq_rr(op1, op2);
    1288         return Jump(m_assembler.je());
    1289 #else
    1290         return je32(op1, op2);
    1291 #endif
    1292     }
    1293 
    1294     Jump jePtr(RegisterID reg, Address address)
    1295     {
    1296 #if PLATFORM(X86_64)
    1297         m_assembler.cmpq_rm(reg, address.offset, address.base);
    1298 #else
    1299         m_assembler.cmpl_rm(reg, address.offset, address.base);
    1300 #endif
    1301         return Jump(m_assembler.je());
    1302     }
    1303 
    1304     Jump jePtr(RegisterID reg, ImmPtr ptr)
    1305     {
    1306 #if PLATFORM(X86_64)
    1307         intptr_t imm = ptr.asIntptr();
    1308         if (CAN_SIGN_EXTEND_32_64(imm)) {
    1309             compareImm64ForBranchEquality(reg, imm);
    1310             return Jump(m_assembler.je());
    1311         } else {
    1312             move(ptr, scratchRegister);
    1313             return jePtr(scratchRegister, reg);
    1314         }
    1315 #else
    1316         return je32(reg, Imm32(ptr));
    1317 #endif
    1318     }
    1319 
    1320     Jump jePtr(Address address, ImmPtr imm)
    1321     {
    1322 #if PLATFORM(X86_64)
    1323         move(imm, scratchRegister);
    1324         return jePtr(scratchRegister, address);
    1325 #else
    1326         return je32(address, Imm32(imm));
    1327 #endif
    1328     }
    1329 
    1330     Jump je32(RegisterID op1, RegisterID op2)
    1331     {
    1332         m_assembler.cmpl_rr(op1, op2);
    1333         return Jump(m_assembler.je());
    1334     }
    1335    
    1336     Jump je32(Address op1, RegisterID op2)
    1337     {
    1338         m_assembler.cmpl_mr(op1.offset, op1.base, op2);
    1339         return Jump(m_assembler.je());
    1340     }
    1341    
    1342     Jump je32(RegisterID reg, Imm32 imm)
    1343     {
    1344         compareImm32ForBranchEquality(reg, imm.m_value);
    1345         return Jump(m_assembler.je());
    1346     }
    1347 
    1348     Jump je32(Address address, Imm32 imm)
    1349     {
    1350         compareImm32ForBranchEquality(address, imm.m_value);
    1351         return Jump(m_assembler.je());
    1352     }
    1353    
    1354     Jump je16(RegisterID op1, BaseIndex op2)
    1355     {
    1356         m_assembler.cmpw_rm(op1, op2.offset, op2.base, op2.index, op2.scale);
    1357         return Jump(m_assembler.je());
    1358     }
    1359    
    1360     Jump jg32(RegisterID left, RegisterID right)
    1361     {
    1362         m_assembler.cmpl_rr(right, left);
    1363         return Jump(m_assembler.jg());
    1364     }
    1365 
    1366     Jump jg32(RegisterID reg, Address address)
    1367     {
    1368         m_assembler.cmpl_mr(address.offset, address.base, reg);
    1369         return Jump(m_assembler.jg());
    1370     }
    1371 
    1372     Jump jgePtr(RegisterID left, RegisterID right)
    1373     {
    1374 #if PLATFORM(X86_64)
    1375         m_assembler.cmpq_rr(right, left);
    1376         return Jump(m_assembler.jge());
    1377 #else
    1378         return jge32(left, right);
    1379 #endif
    1380     }
    1381 
    1382     Jump jgePtr(RegisterID reg, ImmPtr ptr)
    1383     {
    1384 #if PLATFORM(X86_64)
    1385         intptr_t imm = ptr.asIntptr();
    1386         if (CAN_SIGN_EXTEND_32_64(imm)) {
    1387             compareImm64ForBranch(reg, imm);
    1388             return Jump(m_assembler.jge());
    1389         } else {
    1390             move(ptr, scratchRegister);
    1391             return jgePtr(reg, scratchRegister);
    1392         }
    1393 #else
    1394         return jge32(reg, Imm32(ptr));
    1395 #endif
    1396     }
    1397 
    1398     Jump jge32(RegisterID left, RegisterID right)
    1399     {
    1400         m_assembler.cmpl_rr(right, left);
    1401         return Jump(m_assembler.jge());
    1402     }
    1403 
    1404     Jump jge32(RegisterID left, Imm32 right)
    1405     {
    1406         compareImm32ForBranch(left, right.m_value);
    1407         return Jump(m_assembler.jge());
    1408     }
    1409 
    1410     Jump jlPtr(RegisterID left, RegisterID right)
    1411     {
    1412 #if PLATFORM(X86_64)
    1413         m_assembler.cmpq_rr(right, left);
    1414         return Jump(m_assembler.jl());
    1415 #else
    1416         return jl32(left, right);
    1417 #endif
    1418     }
    1419 
    1420     Jump jlPtr(RegisterID reg, ImmPtr ptr)
    1421     {
    1422 #if PLATFORM(X86_64)
    1423         intptr_t imm = ptr.asIntptr();
    1424         if (CAN_SIGN_EXTEND_32_64(imm)) {
    1425             compareImm64ForBranch(reg, imm);
    1426             return Jump(m_assembler.jl());
    1427         } else {
    1428             move(ptr, scratchRegister);
    1429             return jlPtr(reg, scratchRegister);
    1430         }
    1431 #else
    1432         return jl32(reg, Imm32(ptr));
    1433 #endif
    1434     }
    1435 
    1436     Jump jl32(RegisterID left, RegisterID right)
    1437     {
    1438         m_assembler.cmpl_rr(right, left);
    1439         return Jump(m_assembler.jl());
    1440     }
    1441    
    1442     Jump jl32(RegisterID left, Imm32 right)
    1443     {
    1444         compareImm32ForBranch(left, right.m_value);
    1445         return Jump(m_assembler.jl());
    1446     }
    1447 
    1448     Jump jlePtr(RegisterID left, RegisterID right)
    1449     {
    1450 #if PLATFORM(X86_64)
    1451         m_assembler.cmpq_rr(right, left);
    1452         return Jump(m_assembler.jle());
    1453 #else
    1454         return jle32(left, right);
    1455 #endif
    1456     }
    1457 
    1458     Jump jlePtr(RegisterID reg, ImmPtr ptr)
    1459     {
    1460 #if PLATFORM(X86_64)
    1461         intptr_t imm = ptr.asIntptr();
    1462         if (CAN_SIGN_EXTEND_32_64(imm)) {
    1463             compareImm64ForBranch(reg, imm);
    1464             return Jump(m_assembler.jle());
    1465         } else {
    1466             move(ptr, scratchRegister);
    1467             return jlePtr(reg, scratchRegister);
    1468         }
    1469 #else
    1470         return jle32(reg, Imm32(ptr));
    1471 #endif
    1472     }
    1473 
    1474     Jump jle32(RegisterID left, RegisterID right)
    1475     {
    1476         m_assembler.cmpl_rr(right, left);
    1477         return Jump(m_assembler.jle());
    1478     }
    1479    
    1480     Jump jle32(RegisterID left, Imm32 right)
    1481     {
    1482         compareImm32ForBranch(left, right.m_value);
    1483         return Jump(m_assembler.jle());
    1484     }
    1485 
    1486     Jump jnePtr(RegisterID op1, RegisterID op2)
    1487     {
    1488 #if PLATFORM(X86_64)
    1489         m_assembler.cmpq_rr(op1, op2);
    1490         return Jump(m_assembler.jne());
    1491 #else
    1492         return jne32(op1, op2);
    1493 #endif
    1494     }
    1495 
    1496     Jump jnePtr(RegisterID reg, Address address)
    1497     {
    1498 #if PLATFORM(X86_64)
    1499         m_assembler.cmpq_rm(reg, address.offset, address.base);
    1500 #else
    1501         m_assembler.cmpl_rm(reg, address.offset, address.base);
    1502 #endif
    1503         return Jump(m_assembler.jne());
    1504     }
    1505 
    1506     Jump jnePtr(RegisterID reg, AbsoluteAddress address)
    1507     {
    1508 #if PLATFORM(X86_64)
    1509         move(ImmPtr(address.m_ptr), scratchRegister);
    1510         return jnePtr(reg, Address(scratchRegister));
    1511 #else
    1512         m_assembler.cmpl_rm(reg, address.m_ptr);
    1513         return Jump(m_assembler.jne());
    1514 #endif
    1515     }
    1516 
    1517     Jump jnePtr(RegisterID reg, ImmPtr ptr)
    1518     {
    1519 #if PLATFORM(X86_64)
    1520         intptr_t imm = ptr.asIntptr();
    1521         if (CAN_SIGN_EXTEND_32_64(imm)) {
    1522             compareImm64ForBranchEquality(reg, imm);
    1523             return Jump(m_assembler.jne());
    1524         } else {
    1525             move(ptr, scratchRegister);
    1526             return jnePtr(scratchRegister, reg);
    1527         }
    1528 #else
    1529         return jne32(reg, Imm32(ptr));
    1530 #endif
    1531     }
    1532 
    1533     Jump jnePtr(Address address, ImmPtr imm)
    1534     {
    1535 #if PLATFORM(X86_64)
    1536         move(imm, scratchRegister);
    1537         return jnePtr(scratchRegister, address);
    1538 #else
    1539         return jne32(address, Imm32(imm));
    1540 #endif
    1541     }
    1542 
    1543 #if !PLATFORM(X86_64)
    1544     Jump jnePtr(AbsoluteAddress address, ImmPtr imm)
    1545     {
    1546         m_assembler.cmpl_im(imm.asIntptr(), address.m_ptr);
    1547         return Jump(m_assembler.jne());
    1548     }
    1549 #endif
    1550 
    1551     Jump jnePtrWithPatch(RegisterID reg, DataLabelPtr& dataLabel, ImmPtr initialValue = ImmPtr(0))
    1552     {
    1553 #if PLATFORM(X86_64)
    1554         m_assembler.movq_i64r(initialValue.asIntptr(), scratchRegister);
    1555         dataLabel = DataLabelPtr(this);
    1556         return jnePtr(scratchRegister, reg);
    1557 #else
    1558         m_assembler.cmpl_ir_force32(initialValue.asIntptr(), reg);
    1559         dataLabel = DataLabelPtr(this);
    1560         return Jump(m_assembler.jne());
    1561 #endif
    1562     }
    1563 
    1564     Jump jnePtrWithPatch(Address address, DataLabelPtr& dataLabel, ImmPtr initialValue = ImmPtr(0))
    1565     {
    1566 #if PLATFORM(X86_64)
    1567         m_assembler.movq_i64r(initialValue.asIntptr(), scratchRegister);
    1568         dataLabel = DataLabelPtr(this);
    1569         return jnePtr(scratchRegister, address);
    1570 #else
    1571         m_assembler.cmpl_im_force32(initialValue.asIntptr(), address.offset, address.base);
    1572         dataLabel = DataLabelPtr(this);
    1573         return Jump(m_assembler.jne());
    1574 #endif
    1575     }
    1576 
    1577     Jump jne32(RegisterID op1, RegisterID op2)
    1578     {
    1579         m_assembler.cmpl_rr(op1, op2);
    1580         return Jump(m_assembler.jne());
    1581     }
    1582 
    1583     Jump jne32(RegisterID reg, Imm32 imm)
    1584     {
    1585         compareImm32ForBranchEquality(reg, imm.m_value);
    1586         return Jump(m_assembler.jne());
    1587     }
    1588 
    1589     Jump jne32(Address address, Imm32 imm)
    1590     {
    1591         compareImm32ForBranchEquality(address, imm.m_value);
    1592         return Jump(m_assembler.jne());
    1593     }
    1594    
    1595     Jump jne32(Address address, RegisterID reg)
    1596     {
    1597         m_assembler.cmpl_rm(reg, address.offset, address.base);
    1598         return Jump(m_assembler.jne());
    1599     }
    1600    
    1601     Jump jnzPtr(RegisterID reg, RegisterID mask)
    1602     {
    1603 #if PLATFORM(X86_64)
    1604         m_assembler.testq_rr(reg, mask);
    1605         return Jump(m_assembler.jne());
    1606 #else
    1607         return jnz32(reg, mask);
    1608 #endif
    1609     }
    1610 
    1611     Jump jnzPtr(RegisterID reg, Imm32 mask = Imm32(-1))
    1612     {
    1613 #if PLATFORM(X86_64)
    1614         testImm64(reg, mask);
    1615         return Jump(m_assembler.jne());
    1616 #else
    1617         return jnz32(reg, mask);
    1618 #endif
    1619     }
    1620 
    1621     Jump jnzPtr(RegisterID reg, ImmPtr mask)
    1622     {
    1623 #if PLATFORM(X86_64)
    1624         move(mask, scratchRegister);
    1625         m_assembler.testq_rr(scratchRegister, reg);
    1626         return Jump(m_assembler.jne());
    1627 #else
    1628         return jnz32(reg, Imm32(mask));
    1629 #endif
    1630     }
    1631 
    1632     Jump jnzPtr(Address address, Imm32 mask = Imm32(-1))
    1633     {
    1634 #if PLATFORM(X86_64)
    1635         testImm64(address, mask);
    1636         return Jump(m_assembler.jne());
    1637 #else
    1638         return jnz32(address, mask);
    1639 #endif
    1640     }
    1641 
    1642     Jump jnz32(RegisterID reg, RegisterID mask)
    1643     {
    1644         m_assembler.testl_rr(reg, mask);
    1645         return Jump(m_assembler.jne());
    1646     }
    1647 
    1648     Jump jnz32(RegisterID reg, Imm32 mask = Imm32(-1))
    1649     {
    1650         testImm32(reg, mask);
    1651         return Jump(m_assembler.jne());
    1652     }
    1653 
    1654     Jump jnz32(Address address, Imm32 mask = Imm32(-1))
    1655     {
    1656         testImm32(address, mask);
    1657         return Jump(m_assembler.jne());
    1658     }
    1659 
    1660     Jump jzPtr(RegisterID reg, RegisterID mask)
    1661     {
    1662 #if PLATFORM(X86_64)
    1663         m_assembler.testq_rr(reg, mask);
    1664         return Jump(m_assembler.je());
    1665 #else
    1666         return jz32(reg, mask);
    1667 #endif
    1668     }
    1669 
    1670     Jump jzPtr(RegisterID reg, Imm32 mask = Imm32(-1))
    1671     {
    1672 #if PLATFORM(X86_64)
    1673         testImm64(reg, mask);
    1674         return Jump(m_assembler.je());
    1675 #else
    1676         return jz32(reg, mask);
    1677 #endif
    1678     }
    1679 
    1680     Jump jzPtr(RegisterID reg, ImmPtr mask)
    1681     {
    1682 #if PLATFORM(X86_64)
    1683         move(mask, scratchRegister);
    1684         m_assembler.testq_rr(scratchRegister, reg);
    1685         return Jump(m_assembler.je());
    1686 #else
    1687         return jz32(reg, Imm32(mask));
    1688 #endif
    1689     }
    1690 
    1691     Jump jzPtr(Address address, Imm32 mask = Imm32(-1))
    1692     {
    1693 #if PLATFORM(X86_64)
    1694         testImm64(address, mask);
    1695         return Jump(m_assembler.je());
    1696 #else
    1697         return jz32(address, mask);
    1698 #endif
    1699     }
    1700 
    1701     Jump jzPtr(BaseIndex address, Imm32 mask = Imm32(-1))
    1702     {
    1703 #if PLATFORM(X86_64)
    1704         testImm64(address, mask);
    1705         return Jump(m_assembler.je());
    1706 #else
    1707         return jz32(address, mask);
    1708 #endif
    1709     }
    1710 
    1711     Jump jz32(RegisterID reg, RegisterID mask)
    1712     {
    1713         m_assembler.testl_rr(reg, mask);
    1714         return Jump(m_assembler.je());
    1715     }
    1716 
    1717     Jump jz32(RegisterID reg, Imm32 mask = Imm32(-1))
    1718     {
    1719         testImm32(reg, mask);
    1720         return Jump(m_assembler.je());
    1721     }
    1722 
    1723     Jump jz32(Address address, Imm32 mask = Imm32(-1))
    1724     {
    1725         testImm32(address, mask);
    1726         return Jump(m_assembler.je());
    1727     }
    1728 
    1729     Jump jz32(BaseIndex address, Imm32 mask = Imm32(-1))
    1730     {
    1731         testImm32(address, mask);
    1732         return Jump(m_assembler.je());
     1343        return Jump(m_assembler.jCC(cond));
    17331344    }
    17341345
     
    17591370    //     jne32(reg1, reg2).linkTo(topOfLoop);
    17601371
    1761     void jae32(RegisterID left, Address right, Label target)
    1762     {
    1763         jae32(left, right).linkTo(target, this);
    1764     }
    1765 
    1766     void je32(RegisterID op1, Imm32 imm, Label target)
    1767     {
    1768         je32(op1, imm).linkTo(target, this);
    1769     }
    1770 
    1771     void je16(RegisterID op1, BaseIndex op2, Label target)
    1772     {
    1773         je16(op1, op2).linkTo(target, this);
    1774     }
    1775    
    1776     void jl32(RegisterID left, Imm32 right, Label target)
    1777     {
    1778         jl32(left, right).linkTo(target, this);
    1779     }
    1780    
    1781     void jle32(RegisterID left, RegisterID right, Label target)
    1782     {
    1783         jle32(left, right).linkTo(target, this);
    1784     }
    1785    
    1786     void jnePtr(RegisterID op1, ImmPtr imm, Label target)
    1787     {
    1788         jnePtr(op1, imm).linkTo(target, this);
    1789     }
    1790 
    1791     void jne32(RegisterID op1, RegisterID op2, Label target)
    1792     {
    1793         jne32(op1, op2).linkTo(target, this);
    1794     }
    1795 
    1796     void jne32(RegisterID op1, Imm32 imm, Label target)
    1797     {
    1798         jne32(op1, imm).linkTo(target, this);
    1799     }
    1800 
    1801     void jzPtr(RegisterID reg, Label target)
    1802     {
    1803         jzPtr(reg).linkTo(target, this);
     1372    void branchPtr(Condition cond, RegisterID op1, ImmPtr imm, Label target)
     1373    {
     1374        branchPtr(cond, op1, imm).linkTo(target, this);
     1375    }
     1376
     1377    void branch32(Condition cond, RegisterID op1, RegisterID op2, Label target)
     1378    {
     1379        branch32(cond, op1, op2).linkTo(target, this);
     1380    }
     1381
     1382    void branch32(Condition cond, RegisterID op1, Imm32 imm, Label target)
     1383    {
     1384        branch32(cond, op1, imm).linkTo(target, this);
     1385    }
     1386
     1387    void branch32(Condition cond, RegisterID left, Address right, Label target)
     1388    {
     1389        branch32(cond, left, right).linkTo(target, this);
     1390    }
     1391
     1392    void branch16(Condition cond, BaseIndex left, RegisterID right, Label target)
     1393    {
     1394        branch16(cond, left, right).linkTo(target, this);
     1395    }
     1396   
     1397    void branchTestPtr(Condition cond, RegisterID reg, Label target)
     1398    {
     1399        branchTestPtr(cond, reg).linkTo(target, this);
    18041400    }
    18051401
     
    18311427    //   operation caused an overflow to occur.
    18321428
    1833     Jump jnzSubPtr(Imm32 imm, RegisterID dest)
    1834     {
     1429    Jump branchAddPtr(Condition cond, RegisterID src, RegisterID dest)
     1430    {
     1431        ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero));
     1432        addPtr(src, dest);
     1433        return Jump(m_assembler.jCC(cond));
     1434    }
     1435   
     1436    Jump branchAdd32(Condition cond, RegisterID src, RegisterID dest)
     1437    {
     1438        ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero));
     1439        add32(src, dest);
     1440        return Jump(m_assembler.jCC(cond));
     1441    }
     1442   
     1443    Jump branchAdd32(Condition cond, Imm32 imm, RegisterID dest)
     1444    {
     1445        ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero));
     1446        add32(imm, dest);
     1447        return Jump(m_assembler.jCC(cond));
     1448    }
     1449   
     1450    Jump branchMul32(Condition cond, RegisterID src, RegisterID dest)
     1451    {
     1452        ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero));
     1453        mul32(src, dest);
     1454        return Jump(m_assembler.jCC(cond));
     1455    }
     1456   
     1457    Jump branchMul32(Condition cond, Imm32 imm, RegisterID src, RegisterID dest)
     1458    {
     1459        ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero));
     1460        mul32(imm, src, dest);
     1461        return Jump(m_assembler.jCC(cond));
     1462    }
     1463   
     1464    Jump branchSubPtr(Condition cond, Imm32 imm, RegisterID dest)
     1465    {
     1466        ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero));
    18351467        subPtr(imm, dest);
    1836         return Jump(m_assembler.jne());
    1837     }
    1838    
    1839     Jump jnzSub32(Imm32 imm, RegisterID dest)
    1840     {
     1468        return Jump(m_assembler.jCC(cond));
     1469    }
     1470   
     1471    Jump branchSub32(Condition cond, RegisterID src, RegisterID dest)
     1472    {
     1473        ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero));
     1474        sub32(src, dest);
     1475        return Jump(m_assembler.jCC(cond));
     1476    }
     1477   
     1478    Jump branchSub32(Condition cond, Imm32 imm, RegisterID dest)
     1479    {
     1480        ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero));
    18411481        sub32(imm, dest);
    1842         return Jump(m_assembler.jne());
    1843     }
    1844    
    1845     Jump joAddPtr(RegisterID src, RegisterID dest)
    1846     {
    1847         addPtr(src, dest);
    1848         return Jump(m_assembler.jo());
    1849     }
    1850    
    1851     Jump joAdd32(RegisterID src, RegisterID dest)
    1852     {
    1853         add32(src, dest);
    1854         return Jump(m_assembler.jo());
    1855     }
    1856    
    1857     Jump joAdd32(Imm32 imm, RegisterID dest)
    1858     {
    1859         add32(imm, dest);
    1860         return Jump(m_assembler.jo());
    1861     }
    1862    
    1863     Jump joMul32(RegisterID src, RegisterID dest)
    1864     {
    1865         mul32(src, dest);
    1866         return Jump(m_assembler.jo());
    1867     }
    1868    
    1869     Jump joMul32(Imm32 imm, RegisterID src, RegisterID dest)
    1870     {
    1871         mul32(imm, src, dest);
    1872         return Jump(m_assembler.jo());
    1873     }
    1874    
    1875     Jump joSub32(RegisterID src, RegisterID dest)
    1876     {
    1877         sub32(src, dest);
    1878         return Jump(m_assembler.jo());
    1879     }
    1880    
    1881     Jump joSub32(Imm32 imm, RegisterID dest)
    1882     {
    1883         sub32(imm, dest);
    1884         return Jump(m_assembler.jo());
    1885     }
    1886    
    1887     Jump jzSubPtr(Imm32 imm, RegisterID dest)
    1888     {
    1889         subPtr(imm, dest);
    1890         return Jump(m_assembler.je());
    1891     }
    1892    
    1893     Jump jzSub32(Imm32 imm, RegisterID dest)
    1894     {
    1895         sub32(imm, dest);
    1896         return Jump(m_assembler.je());
     1482        return Jump(m_assembler.jCC(cond));
    18971483    }
    18981484   
     
    19661552    }
    19671553
    1968     void sete32(RegisterID src, RegisterID srcDest)
    1969     {
    1970         m_assembler.cmpl_rr(srcDest, src);
    1971         m_assembler.sete_r(srcDest);
    1972         m_assembler.movzbl_rr(srcDest, srcDest);
    1973     }
    1974 
    1975     void sete32(Imm32 imm, RegisterID srcDest)
    1976     {
    1977         compareImm32ForBranchEquality(srcDest, imm.m_value);
    1978         m_assembler.sete_r(srcDest);
    1979         m_assembler.movzbl_rr(srcDest, srcDest);
    1980     }
    1981 
    1982     void setne32(RegisterID src, RegisterID srcDest)
    1983     {
    1984         m_assembler.cmpl_rr(srcDest, src);
    1985         m_assembler.setne_r(srcDest);
    1986         m_assembler.movzbl_rr(srcDest, srcDest);
    1987     }
    1988 
    1989     void setne32(Imm32 imm, RegisterID srcDest)
    1990     {
    1991         compareImm32ForBranchEquality(srcDest, imm.m_value);
    1992         m_assembler.setne_r(srcDest);
    1993         m_assembler.movzbl_rr(srcDest, srcDest);
     1554    void set32(Condition cond, RegisterID left, RegisterID right, RegisterID dest)
     1555    {
     1556        m_assembler.cmpl_rr(right, left);
     1557        m_assembler.setCC_r(cond, dest);
     1558        m_assembler.movzbl_rr(dest, dest);
     1559    }
     1560
     1561    void set32(Condition cond, RegisterID left, Imm32 right, RegisterID dest)
     1562    {
     1563        if (((cond == Equal) || (cond == NotEqual)) && !right.m_value)
     1564            m_assembler.testl_rr(left, left);
     1565        else
     1566            m_assembler.cmpl_ir(right.m_value, left);
     1567        m_assembler.setCC_r(cond, dest);
     1568        m_assembler.movzbl_rr(dest, dest);
    19941569    }
    19951570
     
    19981573    // dest-src, operations always have a dest? ... possibly not true, considering
    19991574    // asm ops like test, or pseudo ops like pop().
    2000     void setnz32(Address address, Imm32 mask, RegisterID dest)
    2001     {
    2002         testImm32(address, mask);
    2003         m_assembler.setnz_r(dest);
     1575    void setTest32(Condition cond, Address address, Imm32 mask, RegisterID dest)
     1576    {
     1577        if (mask.m_value == -1)
     1578            m_assembler.cmpl_im(0, address.offset, address.base);
     1579        else
     1580            m_assembler.testl_i32m(mask.m_value, address.offset, address.base);
     1581        m_assembler.setCC_r(cond, dest);
    20041582        m_assembler.movzbl_rr(dest, dest);
    20051583    }
    2006 
    2007     void setz32(Address address, Imm32 mask, RegisterID dest)
    2008     {
    2009         testImm32(address, mask);
    2010         m_assembler.setz_r(dest);
    2011         m_assembler.movzbl_rr(dest, dest);
    2012     }
    20131584};
    20141585
  • trunk/JavaScriptCore/assembler/X86Assembler.h

    r39998 r40562  
    8484    typedef X86::XMMRegisterID XMMRegisterID;
    8585
     86    typedef enum {
     87        ConditionO,
     88        ConditionNO,
     89        ConditionB,
     90        ConditionAE,
     91        ConditionE,
     92        ConditionNE,
     93        ConditionBE,
     94        ConditionA,
     95        ConditionS,
     96        ConditionNS,
     97        ConditionP,
     98        ConditionNP,
     99        ConditionL,
     100        ConditionGE,
     101        ConditionLE,
     102        ConditionG,
     103
     104        ConditionC  = ConditionB,
     105        ConditionNC = ConditionAE,
     106    } Condition;
     107
     108private:
    86109    typedef enum {
    87110        OP_ADD_EvGv                     = 0x01,
     
    148171        OP2_MOVD_VdEd       = 0x6E,
    149172        OP2_MOVD_EdVd       = 0x7E,
    150         OP2_JO_rel32        = 0x80,
    151         OP2_JB_rel32        = 0x82,
    152         OP2_JAE_rel32       = 0x83,
    153         OP2_JE_rel32        = 0x84,
    154         OP2_JNE_rel32       = 0x85,
    155         OP2_JBE_rel32       = 0x86,
    156         OP2_JA_rel32        = 0x87,
    157         OP2_JS_rel32        = 0x88,
    158         OP2_JP_rel32        = 0x8A,
    159         OP2_JL_rel32        = 0x8C,
    160         OP2_JGE_rel32       = 0x8D,
    161         OP2_JLE_rel32       = 0x8E,
    162         OP2_JG_rel32        = 0x8F,
    163         OP_SETE             = 0x94,
    164         OP_SETNE            = 0x95,
     173        OP2_JCC_rel32       = 0x80,
     174        OP_SETCC            = 0x90,
    165175        OP2_IMUL_GvEv       = 0xAF,
    166176        OP2_MOVZX_GvEb      = 0xB6,
     
    168178        OP2_PEXTRW_GdUdIb   = 0xC5,
    169179    } TwoByteOpcodeID;
     180
     181    TwoByteOpcodeID jccRel32(Condition cond)
     182    {
     183        return (TwoByteOpcodeID)(OP2_JCC_rel32 + cond);
     184    }
     185
     186    TwoByteOpcodeID setccOpcode(Condition cond)
     187    {
     188        return (TwoByteOpcodeID)(OP_SETCC + cond);
     189    }
    170190
    171191    typedef enum {
     
    193213    } GroupOpcodeID;
    194214   
    195     // Opaque label types
    196    
    197 private:
    198215    class X86InstructionFormatter;
    199216public:
     
    641658    }
    642659
     660    void cmpq_mr(int offset, RegisterID base, RegisterID src)
     661    {
     662        m_formatter.oneByteOp64(OP_CMP_GvEv, src, base, offset);
     663    }
     664
    643665    void cmpq_ir(int imm, RegisterID dst)
    644666    {
     
    751773    }
    752774
     775    void setCC_r(Condition cond, RegisterID dst)
     776    {
     777        m_formatter.twoByteOp8(setccOpcode(cond), (GroupOpcodeID)0, dst);
     778    }
     779
    753780    void sete_r(RegisterID dst)
    754781    {
    755         m_formatter.twoByteOp8(OP_SETE, (GroupOpcodeID)0, dst);
     782        m_formatter.twoByteOp8(setccOpcode(ConditionE), (GroupOpcodeID)0, dst);
    756783    }
    757784
     
    763790    void setne_r(RegisterID dst)
    764791    {
    765         m_formatter.twoByteOp8(OP_SETNE, (GroupOpcodeID)0, dst);
     792        m_formatter.twoByteOp8(setccOpcode(ConditionNE), (GroupOpcodeID)0, dst);
    766793    }
    767794
     
    9821009    JmpSrc jne()
    9831010    {
    984         m_formatter.twoByteOp(OP2_JNE_rel32);
     1011        m_formatter.twoByteOp(jccRel32(ConditionNE));
    9851012        return m_formatter.immediateRel32();
    9861013    }
     
    9931020    JmpSrc je()
    9941021    {
    995         m_formatter.twoByteOp(OP2_JE_rel32);
     1022        m_formatter.twoByteOp(jccRel32(ConditionE));
    9961023        return m_formatter.immediateRel32();
    9971024    }
     
    9991026    JmpSrc jl()
    10001027    {
    1001         m_formatter.twoByteOp(OP2_JL_rel32);
     1028        m_formatter.twoByteOp(jccRel32(ConditionL));
    10021029        return m_formatter.immediateRel32();
    10031030    }
     
    10051032    JmpSrc jb()
    10061033    {
    1007         m_formatter.twoByteOp(OP2_JB_rel32);
     1034        m_formatter.twoByteOp(jccRel32(ConditionB));
    10081035        return m_formatter.immediateRel32();
    10091036    }
     
    10111038    JmpSrc jle()
    10121039    {
    1013         m_formatter.twoByteOp(OP2_JLE_rel32);
     1040        m_formatter.twoByteOp(jccRel32(ConditionLE));
    10141041        return m_formatter.immediateRel32();
    10151042    }
     
    10171044    JmpSrc jbe()
    10181045    {
    1019         m_formatter.twoByteOp(OP2_JBE_rel32);
     1046        m_formatter.twoByteOp(jccRel32(ConditionBE));
    10201047        return m_formatter.immediateRel32();
    10211048    }
     
    10231050    JmpSrc jge()
    10241051    {
    1025         m_formatter.twoByteOp(OP2_JGE_rel32);
     1052        m_formatter.twoByteOp(jccRel32(ConditionGE));
    10261053        return m_formatter.immediateRel32();
    10271054    }
     
    10291056    JmpSrc jg()
    10301057    {
    1031         m_formatter.twoByteOp(OP2_JG_rel32);
     1058        m_formatter.twoByteOp(jccRel32(ConditionG));
    10321059        return m_formatter.immediateRel32();
    10331060    }
     
    10351062    JmpSrc ja()
    10361063    {
    1037         m_formatter.twoByteOp(OP2_JA_rel32);
     1064        m_formatter.twoByteOp(jccRel32(ConditionA));
    10381065        return m_formatter.immediateRel32();
    10391066    }
     
    10411068    JmpSrc jae()
    10421069    {
    1043         m_formatter.twoByteOp(OP2_JAE_rel32);
     1070        m_formatter.twoByteOp(jccRel32(ConditionAE));
    10441071        return m_formatter.immediateRel32();
    10451072    }
     
    10471074    JmpSrc jo()
    10481075    {
    1049         m_formatter.twoByteOp(OP2_JO_rel32);
     1076        m_formatter.twoByteOp(jccRel32(ConditionO));
    10501077        return m_formatter.immediateRel32();
    10511078    }
     
    10531080    JmpSrc jp()
    10541081    {
    1055         m_formatter.twoByteOp(OP2_JP_rel32);
     1082        m_formatter.twoByteOp(jccRel32(ConditionP));
    10561083        return m_formatter.immediateRel32();
    10571084    }
     
    10591086    JmpSrc js()
    10601087    {
    1061         m_formatter.twoByteOp(OP2_JS_rel32);
     1088        m_formatter.twoByteOp(jccRel32(ConditionS));
     1089        return m_formatter.immediateRel32();
     1090    }
     1091
     1092    JmpSrc jCC(Condition cond)
     1093    {
     1094        m_formatter.twoByteOp(jccRel32(cond));
    10621095        return m_formatter.immediateRel32();
    10631096    }
     
    16021635            ASSERT(mode != ModRmRegister);
    16031636
    1604             // Encode sacle of (1,2,4,8) -> (0,1,2,3)
    1605             int shift = 0;
    1606             while (scale >>= 1)
    1607                 shift++;
    1608 
    16091637            putModRm(mode, reg, hasSib);
    1610             m_buffer.putByteUnchecked((shift << 6) | ((index & 7) << 3) | (base & 7));
     1638            m_buffer.putByteUnchecked((scale << 6) | ((index & 7) << 3) | (base & 7));
    16111639        }
    16121640
  • trunk/JavaScriptCore/jit/JIT.cpp

    r40279 r40562  
    239239
    240240    if (type == OpStrictEq)
    241         sete32(X86::edx, X86::eax);
     241        set32(Equal, X86::edx, X86::eax, X86::eax);
    242242    else
    243         setne32(X86::edx, X86::eax);
     243        set32(NotEqual, X86::edx, X86::eax, X86::eax);
    244244    emitTagAsBoolImmediate(X86::eax);
    245245#else
     
    249249    Jump firstNotImmediate = emitJumpIfJSCell(X86::eax);
    250250    Jump secondNotImmediate = emitJumpIfJSCell(X86::edx);
    251     Jump bothWereImmediatesButNotEqual = jnePtr(X86::edx, X86::eax);
     251    Jump bothWereImmediatesButNotEqual = branchPtr(NotEqual, X86::edx, X86::eax);
    252252
    253253    // They are equal - set the result to true. (Or false, if negated).
     
    260260    firstNotImmediate.link(this);
    261261    emitJumpSlowCaseIfJSCell(X86::edx);
    262     addSlowCase(jePtr(X86::edx, ImmPtr(JSValuePtr::encode(js0()))));
     262    addSlowCase(branchPtr(Equal, X86::edx, ImmPtr(JSValuePtr::encode(js0()))));
    263263    Jump firstWasNotImmediate = jump();
    264264
     
    266266    // If eax is 0 jump to a slow case, otherwise these values are not equal.
    267267    secondNotImmediate.link(this);
    268     addSlowCase(jePtr(X86::eax, ImmPtr(JSValuePtr::encode(js0()))));
     268    addSlowCase(branchPtr(Equal, X86::eax, ImmPtr(JSValuePtr::encode(js0()))));
    269269
    270270    // We get here if the two values are different immediates, or one is 0 and the other is a JSCell.
     
    282282void JIT::emitSlowScriptCheck()
    283283{
    284     Jump skipTimeout = jnzSub32(Imm32(1), timeoutCheckRegister);
     284    Jump skipTimeout = branchSub32(NonZero, Imm32(1), timeoutCheckRegister);
    285285    emitCTICall(Interpreter::cti_timeout_check);
    286286    move(X86::eax, timeoutCheckRegister);
     
    380380                int32_t op2imm = static_cast<int32_t>(JSImmediate::rawValue(getConstantOperand(op2)));
    381381#endif
    382                 addJump(jl32(X86::eax, Imm32(op2imm)), target + 3);
     382                addJump(branch32(LessThan, X86::eax, Imm32(op2imm)), target + 3);
    383383            } else {
    384384                emitGetVirtualRegisters(op1, X86::eax, op2, X86::edx);
    385385                emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    386386                emitJumpSlowCaseIfNotImmediateInteger(X86::edx);
    387                 addJump(jl32(X86::eax, X86::edx), target + 3);
     387                addJump(branch32(LessThan, X86::eax, X86::edx), target + 3);
    388388            }
    389389            NEXT_OPCODE(op_loop_if_less);
     
    403403                int32_t op2imm = static_cast<int32_t>(JSImmediate::rawValue(getConstantOperand(op2)));
    404404#endif
    405                 addJump(jle32(X86::eax, Imm32(op2imm)), target + 3);
     405                addJump(branch32(LessThanOrEqual, X86::eax, Imm32(op2imm)), target + 3);
    406406            } else {
    407407                emitGetVirtualRegisters(op1, X86::eax, op2, X86::edx);
    408408                emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    409409                emitJumpSlowCaseIfNotImmediateInteger(X86::edx);
    410                 addJump(jle32(X86::eax, X86::edx), target + 3);
     410                addJump(branch32(LessThanOrEqual, X86::eax, X86::edx), target + 3);
    411411            }
    412412            NEXT_OPCODE(op_loop_if_less);
     
    445445            sub32(Address(X86::eax, FIELD_OFFSET(Structure, m_typeInfo.m_type)), X86::ebx);
    446446            sub32(Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_type)), X86::ebx);
    447             addSlowCase(jne32(Address(X86::edx, FIELD_OFFSET(Structure, m_typeInfo.m_type)), X86::ebx));
     447            addSlowCase(branch32(NotEqual, Address(X86::edx, FIELD_OFFSET(Structure, m_typeInfo.m_type)), X86::ebx));
    448448
    449449            // check that baseVal's flags include ImplementsHasInstance but not OverridesHasInstance
    450450            load32(Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), X86::ecx);
    451451            and32(Imm32(ImplementsHasInstance | OverridesHasInstance), X86::ecx);
    452             addSlowCase(jne32(X86::ecx, Imm32(ImplementsHasInstance)));
     452            addSlowCase(branch32(NotEqual, X86::ecx, Imm32(ImplementsHasInstance)));
    453453
    454454            emitGetVirtualRegister(currentInstruction[2].u.operand, X86::ecx); // reload value
     
    464464            loadPtr(Address(X86::ecx, FIELD_OFFSET(Structure, m_prototype)), X86::ecx);
    465465
    466             Jump exit = jePtr(X86::ecx, X86::edx);
    467 
    468             jnePtr(X86::ecx, ImmPtr(JSValuePtr::encode(jsNull())), loop);
     466            Jump exit = branchPtr(Equal, X86::ecx, X86::edx);
     467
     468            branchPtr(NotEqual, X86::ecx, ImmPtr(JSValuePtr::encode(jsNull())), loop);
    469469
    470470            move(ImmPtr(JSValuePtr::encode(jsBoolean(false))), X86::eax);
     
    593593            emitJumpSlowCaseIfNotJSCell(X86::eax);
    594594            loadPtr(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), X86::ecx);
    595             addSlowCase(jne32(Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo) + FIELD_OFFSET(TypeInfo, m_type)), Imm32(ObjectType)));
     595            addSlowCase(branch32(NotEqual, Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo) + FIELD_OFFSET(TypeInfo, m_type)), Imm32(ObjectType)));
    596596
    597597            NEXT_OPCODE(op_construct_verify);
     
    612612#endif
    613613            emitJumpSlowCaseIfNotJSCell(X86::eax);
    614             addSlowCase(jnePtr(Address(X86::eax), ImmPtr(m_interpreter->m_jsArrayVptr)));
     614            addSlowCase(branchPtr(NotEqual, Address(X86::eax), ImmPtr(m_interpreter->m_jsArrayVptr)));
    615615
    616616            // This is an array; get the m_storage pointer into ecx, then check if the index is below the fast cutoff
    617617            loadPtr(Address(X86::eax, FIELD_OFFSET(JSArray, m_storage)), X86::ecx);
    618             addSlowCase(jae32(X86::edx, Address(X86::eax, FIELD_OFFSET(JSArray, m_fastAccessCutoff))));
     618            addSlowCase(branch32(AboveOrEqual, X86::edx, Address(X86::eax, FIELD_OFFSET(JSArray, m_fastAccessCutoff))));
    619619
    620620            // Get the value from the vector
     
    645645#endif
    646646            emitJumpSlowCaseIfNotJSCell(X86::eax);
    647             addSlowCase(jnePtr(Address(X86::eax), ImmPtr(m_interpreter->m_jsArrayVptr)));
     647            addSlowCase(branchPtr(NotEqual, Address(X86::eax), ImmPtr(m_interpreter->m_jsArrayVptr)));
    648648
    649649            // This is an array; get the m_storage pointer into ecx, then check if the index is below the fast cutoff
    650650            loadPtr(Address(X86::eax, FIELD_OFFSET(JSArray, m_storage)), X86::ecx);
    651             Jump inFastVector = jb32(X86::edx, Address(X86::eax, FIELD_OFFSET(JSArray, m_fastAccessCutoff)));
     651            Jump inFastVector = branch32(Below, X86::edx, Address(X86::eax, FIELD_OFFSET(JSArray, m_fastAccessCutoff)));
    652652            // No; oh well, check if the access if within the vector - if so, we may still be okay.
    653             addSlowCase(jae32(X86::edx, Address(X86::ecx, FIELD_OFFSET(ArrayStorage, m_vectorLength))));
     653            addSlowCase(branch32(AboveOrEqual, X86::edx, Address(X86::ecx, FIELD_OFFSET(ArrayStorage, m_vectorLength))));
    654654
    655655            // This is a write to the slow part of the vector; first, we have to check if this would be the first write to this location.
    656656            // FIXME: should be able to handle initial write to array; increment the the number of items in the array, and potentially update fast access cutoff.
    657             addSlowCase(jzPtr(BaseIndex(X86::ecx, X86::edx, ScalePtr, FIELD_OFFSET(ArrayStorage, m_vector[0]))));
     657            addSlowCase(branchTestPtr(Zero, BaseIndex(X86::ecx, X86::edx, ScalePtr, FIELD_OFFSET(ArrayStorage, m_vector[0]))));
    658658
    659659            // All good - put the value into the array.
     
    670670            emitGetVirtualRegister(currentInstruction[1].u.operand, X86::eax);
    671671
    672             Jump isZero = jePtr(X86::eax, ImmPtr(JSValuePtr::encode(js0())));
     672            Jump isZero = branchPtr(Equal, X86::eax, ImmPtr(JSValuePtr::encode(js0())));
    673673            addJump(emitJumpIfImmediateInteger(X86::eax), target + 2);
    674674
    675             addJump(jePtr(X86::eax, ImmPtr(JSValuePtr::encode(jsBoolean(true)))), target + 2);
    676             addSlowCase(jnePtr(X86::eax, ImmPtr(JSValuePtr::encode(jsBoolean(false)))));
     675            addJump(branchPtr(Equal, X86::eax, ImmPtr(JSValuePtr::encode(jsBoolean(true)))), target + 2);
     676            addSlowCase(branchPtr(NotEqual, X86::eax, ImmPtr(JSValuePtr::encode(jsBoolean(false)))));
    677677
    678678            isZero.link(this);
     
    712712            move(ImmPtr(globalObject), X86::eax);
    713713            loadPtr(structureAddress, X86::edx);
    714             Jump noMatch = jnePtr(X86::edx, Address(X86::eax, FIELD_OFFSET(JSCell, m_structure))); // Structures don't match
     714            Jump noMatch = branchPtr(NotEqual, X86::edx, Address(X86::eax, FIELD_OFFSET(JSCell, m_structure))); // Structures don't match
    715715
    716716            // Load cached property
     
    748748                int32_t op2imm = static_cast<int32_t>(JSImmediate::rawValue(getConstantOperand(op2)));
    749749#endif
    750                 addJump(jge32(X86::eax, Imm32(op2imm)), target + 3);
     750                addJump(branch32(GreaterThanOrEqual, X86::eax, Imm32(op2imm)), target + 3);
    751751            } else {
    752752                emitGetVirtualRegisters(op1, X86::eax, op2, X86::edx);
    753753                emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    754754                emitJumpSlowCaseIfNotImmediateInteger(X86::edx);
    755                 addJump(jge32(X86::eax, X86::edx), target + 3);
     755                addJump(branch32(GreaterThanOrEqual, X86::eax, X86::edx), target + 3);
    756756            }
    757757            NEXT_OPCODE(op_jnless);
     
    760760            emitGetVirtualRegister(currentInstruction[2].u.operand, X86::eax);
    761761            xorPtr(Imm32(static_cast<int32_t>(JSImmediate::FullTagTypeBool)), X86::eax);
    762             addSlowCase(jnzPtr(X86::eax, Imm32(static_cast<int32_t>(~JSImmediate::ExtendedPayloadBitBoolValue))));
     762            addSlowCase(branchTestPtr(NonZero, X86::eax, Imm32(static_cast<int32_t>(~JSImmediate::ExtendedPayloadBitBoolValue))));
    763763            xorPtr(Imm32(static_cast<int32_t>(JSImmediate::FullTagTypeBool | JSImmediate::ExtendedPayloadBitBoolValue)), X86::eax);
    764764            emitPutVirtualRegister(currentInstruction[1].u.operand);
     
    769769            emitGetVirtualRegister(currentInstruction[1].u.operand, X86::eax);
    770770
    771             addJump(jePtr(X86::eax, ImmPtr(JSValuePtr::encode(js0()))), target + 2);
     771            addJump(branchPtr(Equal, X86::eax, ImmPtr(JSValuePtr::encode(js0()))), target + 2);
    772772            Jump isNonZero = emitJumpIfImmediateInteger(X86::eax);
    773773
    774             addJump(jePtr(X86::eax, ImmPtr(JSValuePtr::encode(jsBoolean(false)))), target + 2);
    775             addSlowCase(jnePtr(X86::eax, ImmPtr(JSValuePtr::encode(jsBoolean(true)))));
     774            addJump(branchPtr(Equal, X86::eax, ImmPtr(JSValuePtr::encode(jsBoolean(false)))), target + 2);
     775            addSlowCase(branchPtr(NotEqual, X86::eax, ImmPtr(JSValuePtr::encode(jsBoolean(true)))));
    776776
    777777            isNonZero.link(this);
     
    787787            // First, handle JSCell cases - check MasqueradesAsUndefined bit on the structure.
    788788            loadPtr(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), X86::ecx);
    789             addJump(jnz32(Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined)), target + 2);
     789            addJump(branchTest32(NonZero, Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined)), target + 2);
    790790            Jump wasNotImmediate = jump();
    791791
     
    793793            isImmediate.link(this);
    794794            andPtr(Imm32(~JSImmediate::ExtendedTagBitUndefined), X86::eax);
    795             addJump(jePtr(X86::eax, ImmPtr(JSValuePtr::encode(jsNull()))), target + 2);           
     795            addJump(branchPtr(Equal, X86::eax, ImmPtr(JSValuePtr::encode(jsNull()))), target + 2);           
    796796
    797797            wasNotImmediate.link(this);
     
    807807            // First, handle JSCell cases - check MasqueradesAsUndefined bit on the structure.
    808808            loadPtr(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), X86::ecx);
    809             addJump(jz32(Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined)), target + 2);
     809            addJump(branchTest32(Zero, Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined)), target + 2);
    810810            Jump wasNotImmediate = jump();
    811811
     
    813813            isImmediate.link(this);
    814814            andPtr(Imm32(~JSImmediate::ExtendedTagBitUndefined), X86::eax);
    815             addJump(jnePtr(X86::eax, ImmPtr(JSValuePtr::encode(jsNull()))), target + 2);           
     815            addJump(branchPtr(NotEqual, X86::eax, ImmPtr(JSValuePtr::encode(jsNull()))), target + 2);           
    816816
    817817            wasNotImmediate.link(this);
     
    843843            emitGetVirtualRegisters(currentInstruction[2].u.operand, X86::eax, currentInstruction[3].u.operand, X86::edx);
    844844            emitJumpSlowCaseIfNotImmediateIntegers(X86::eax, X86::edx, X86::ecx);
    845             sete32(X86::edx, X86::eax);
     845            set32(Equal, X86::edx, X86::eax, X86::eax);
    846846            emitTagAsBoolImmediate(X86::eax);
    847847            emitPutVirtualRegister(currentInstruction[1].u.operand);
     
    895895            emitGetVirtualRegister(currentInstruction[1].u.operand, X86::eax);
    896896
    897             Jump isZero = jePtr(X86::eax, ImmPtr(JSValuePtr::encode(js0())));
     897            Jump isZero = branchPtr(Equal, X86::eax, ImmPtr(JSValuePtr::encode(js0())));
    898898            addJump(emitJumpIfImmediateInteger(X86::eax), target + 2);
    899899
    900             addJump(jePtr(X86::eax, ImmPtr(JSValuePtr::encode(jsBoolean(true)))), target + 2);
    901             addSlowCase(jnePtr(X86::eax, ImmPtr(JSValuePtr::encode(jsBoolean(false)))));
     900            addJump(branchPtr(Equal, X86::eax, ImmPtr(JSValuePtr::encode(jsBoolean(true)))), target + 2);
     901            addSlowCase(branchPtr(NotEqual, X86::eax, ImmPtr(JSValuePtr::encode(jsBoolean(false)))));
    902902
    903903            isZero.link(this);
     
    908908            emitGetVirtualRegisters(currentInstruction[2].u.operand, X86::eax, currentInstruction[3].u.operand, X86::edx);
    909909            emitJumpSlowCaseIfNotImmediateIntegers(X86::eax, X86::edx, X86::ecx);
    910             setne32(X86::edx, X86::eax);
     910            set32(NotEqual, X86::edx, X86::eax, X86::eax);
    911911            emitTagAsBoolImmediate(X86::eax);
    912912
     
    974974            unsigned target = currentInstruction[3].u.operand;
    975975            emitCTICall(Interpreter::cti_op_next_pname);
    976             Jump endOfIter = jzPtr(X86::eax);
     976            Jump endOfIter = branchTestPtr(Zero, X86::eax);
    977977            emitPutVirtualRegister(currentInstruction[1].u.operand);
    978978            addJump(jump(), target + 3);
     
    10131013            emitJumpSlowCaseIfNotJSCell(X86::eax, srcVReg);
    10141014            loadPtr(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), X86::ecx);
    1015             addSlowCase(jne32(Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_type)), Imm32(NumberType)));
     1015            addSlowCase(branch32(NotEqual, Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_type)), Imm32(NumberType)));
    10161016           
    10171017            wasImmediate.link(this);
     
    11431143
    11441144            loadPtr(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), X86::ecx);
    1145             setnz32(Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), X86::eax);
     1145            setTest32(NonZero, Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), X86::eax);
    11461146
    11471147            Jump wasNotImmediate = jump();
     
    11501150
    11511151            andPtr(Imm32(~JSImmediate::ExtendedTagBitUndefined), X86::eax);
    1152             sete32(Imm32(JSImmediate::FullTagTypeNull), X86::eax);
     1152            set32(Equal, X86::eax, Imm32(JSImmediate::FullTagTypeNull), X86::eax);
    11531153
    11541154            wasNotImmediate.link(this);
     
    11671167
    11681168            loadPtr(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), X86::ecx);
    1169             setz32(Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), X86::eax);
     1169            setTest32(Zero, Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(MasqueradesAsUndefined), X86::eax);
    11701170
    11711171            Jump wasNotImmediate = jump();
     
    11741174
    11751175            andPtr(Imm32(~JSImmediate::ExtendedTagBitUndefined), X86::eax);
    1176             setne32(Imm32(JSImmediate::FullTagTypeNull), X86::eax);
     1176            set32(NotEqual, X86::eax, Imm32(JSImmediate::FullTagTypeNull), X86::eax);
    11771177
    11781178            wasNotImmediate.link(this);
     
    12181218            emitJumpSlowCaseIfNotJSCell(X86::eax);
    12191219            loadPtr(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), X86::edx);
    1220             addSlowCase(jnz32(Address(X86::edx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(NeedsThisConversion)));
     1220            addSlowCase(branchTest32(NonZero, Address(X86::edx, FIELD_OFFSET(Structure, m_typeInfo.m_flags)), Imm32(NeedsThisConversion)));
    12211221
    12221222            NEXT_OPCODE(op_convert_this);
     
    12241224        case op_profile_will_call: {
    12251225            emitGetCTIParam(STUB_ARGS_profilerReference, X86::eax);
    1226             Jump noProfiler = jzPtr(Address(X86::eax));
     1226            Jump noProfiler = branchTestPtr(Zero, Address(X86::eax));
    12271227            emitPutJITStubArgFromVirtualRegister(currentInstruction[1].u.operand, 1, X86::eax);
    12281228            emitCTICall(Interpreter::cti_op_profile_will_call);
     
    12331233        case op_profile_did_call: {
    12341234            emitGetCTIParam(STUB_ARGS_profilerReference, X86::eax);
    1235             Jump noProfiler = jzPtr(Address(X86::eax));
     1235            Jump noProfiler = branchTestPtr(Zero, Address(X86::eax));
    12361236            emitPutJITStubArgFromVirtualRegister(currentInstruction[1].u.operand, 1, X86::eax);
    12371237            emitCTICall(Interpreter::cti_op_profile_did_call);
     
    13281328            // First, check if this is an access to the vector
    13291329            linkSlowCase(iter);
    1330             jae32(X86::edx, Address(X86::ecx, FIELD_OFFSET(ArrayStorage, m_vectorLength)), beginGetByValSlow);
     1330            branch32(AboveOrEqual, X86::edx, Address(X86::ecx, FIELD_OFFSET(ArrayStorage, m_vectorLength)), beginGetByValSlow);
    13311331
    13321332            // okay, missed the fast region, but it is still in the vector.  Get the value.
    13331333            loadPtr(BaseIndex(X86::ecx, X86::edx, ScalePtr, FIELD_OFFSET(ArrayStorage, m_vector[0])), X86::ecx);
    13341334            // Check whether the value loaded is zero; if so we need to return undefined.
    1335             jzPtr(X86::ecx, beginGetByValSlow);
     1335            branchTestPtr(Zero, X86::ecx, beginGetByValSlow);
    13361336            move(X86::ecx, X86::eax);
    13371337            emitPutVirtualRegister(currentInstruction[1].u.operand, X86::eax);
     
    13591359                emitPutJITStubArgFromVirtualRegister(op2, 2, X86::ecx);
    13601360                emitCTICall(Interpreter::cti_op_loop_if_less);
    1361                 emitJumpSlowToHot(jnz32(X86::eax), target + 3);
     1361                emitJumpSlowToHot(branchTest32(NonZero, X86::eax), target + 3);
    13621362            } else {
    13631363                linkSlowCase(iter);
     
    13661366                emitPutJITStubArg(X86::edx, 2);
    13671367                emitCTICall(Interpreter::cti_op_loop_if_less);
    1368                 emitJumpSlowToHot(jnz32(X86::eax), target + 3);
     1368                emitJumpSlowToHot(branchTest32(NonZero, X86::eax), target + 3);
    13691369            }
    13701370            NEXT_OPCODE(op_loop_if_less);
     
    13861386                emitPutJITStubArgFromVirtualRegister(currentInstruction[2].u.operand, 2, X86::ecx);
    13871387                emitCTICall(Interpreter::cti_op_loop_if_lesseq);
    1388                 emitJumpSlowToHot(jnz32(X86::eax), target + 3);
     1388                emitJumpSlowToHot(branchTest32(NonZero, X86::eax), target + 3);
    13891389            } else {
    13901390                linkSlowCase(iter);
     
    13931393                emitPutJITStubArg(X86::edx, 2);
    13941394                emitCTICall(Interpreter::cti_op_loop_if_lesseq);
    1395                 emitJumpSlowToHot(jnz32(X86::eax), target + 3);
     1395                emitJumpSlowToHot(branchTest32(NonZero, X86::eax), target + 3);
    13961396            }
    13971397            NEXT_OPCODE(op_loop_if_lesseq);
     
    14311431            emitCTICall(Interpreter::cti_op_jtrue);
    14321432            unsigned target = currentInstruction[2].u.operand;
    1433             emitJumpSlowToHot(jnz32(X86::eax), target + 2);
     1433            emitJumpSlowToHot(branchTest32(NonZero, X86::eax), target + 2);
    14341434            NEXT_OPCODE(op_loop_if_true);
    14351435        }
     
    14461446                emitPutJITStubArgFromVirtualRegister(currentInstruction[2].u.operand, 2, X86::ecx);
    14471447                emitCTICall(Interpreter::cti_op_jless);
    1448                 emitJumpSlowToHot(jz32(X86::eax), target + 3);
     1448                emitJumpSlowToHot(branchTest32(Zero, X86::eax), target + 3);
    14491449            } else {
    14501450                linkSlowCase(iter);
     
    14531453                emitPutJITStubArg(X86::edx, 2);
    14541454                emitCTICall(Interpreter::cti_op_jless);
    1455                 emitJumpSlowToHot(jz32(X86::eax), target + 3);
     1455                emitJumpSlowToHot(branchTest32(Zero, X86::eax), target + 3);
    14561456            }
    14571457            NEXT_OPCODE(op_jnless);
     
    14701470            emitCTICall(Interpreter::cti_op_jtrue);
    14711471            unsigned target = currentInstruction[2].u.operand;
    1472             emitJumpSlowToHot(jz32(X86::eax), target + 2); // inverted!
     1472            emitJumpSlowToHot(branchTest32(Zero, X86::eax), target + 2); // inverted!
    14731473            NEXT_OPCODE(op_jfalse);
    14741474        }
     
    14931493            emitCTICall(Interpreter::cti_op_jtrue);
    14941494            unsigned target = currentInstruction[2].u.operand;
    1495             emitJumpSlowToHot(jnz32(X86::eax), target + 2);
     1495            emitJumpSlowToHot(branchTest32(NonZero, X86::eax), target + 2);
    14961496            NEXT_OPCODE(op_jtrue);
    14971497        }
     
    16401640        addPtr(Imm32(m_codeBlock->m_numCalleeRegisters * sizeof(Register)), callFrameRegister, X86::edx);
    16411641       
    1642         slowRegisterFileCheck = jg32(X86::edx, Address(X86::eax, FIELD_OFFSET(RegisterFile, m_end)));
     1642        slowRegisterFileCheck = branch32(GreaterThan, X86::edx, Address(X86::eax, FIELD_OFFSET(RegisterFile, m_end)));
    16431643        afterRegisterFileCheck = label();
    16441644    }
     
    17541754    // Check eax is an array
    17551755    Jump array_failureCases1 = emitJumpIfNotJSCell(X86::eax);
    1756     Jump array_failureCases2 = jnePtr(Address(X86::eax), ImmPtr(m_interpreter->m_jsArrayVptr));
     1756    Jump array_failureCases2 = branchPtr(NotEqual, Address(X86::eax), ImmPtr(m_interpreter->m_jsArrayVptr));
    17571757
    17581758    // Checks out okay! - get the length from the storage
     
    17601760    load32(Address(X86::eax, FIELD_OFFSET(ArrayStorage, m_length)), X86::eax);
    17611761
    1762     Jump array_failureCases3 = ja32(X86::eax, Imm32(JSImmediate::maxImmediateInt));
     1762    Jump array_failureCases3 = branch32(Above, X86::eax, Imm32(JSImmediate::maxImmediateInt));
    17631763
    17641764    // X86::eax contains a 64 bit value (is positive, is zero extended) so we don't need sign extend here.
     
    17721772    // Check eax is a string
    17731773    Jump string_failureCases1 = emitJumpIfNotJSCell(X86::eax);
    1774     Jump string_failureCases2 = jnePtr(Address(X86::eax), ImmPtr(m_interpreter->m_jsStringVptr));
     1774    Jump string_failureCases2 = branchPtr(NotEqual, Address(X86::eax), ImmPtr(m_interpreter->m_jsStringVptr));
    17751775
    17761776    // Checks out okay! - get the length from the Ustring.
     
    17781778    load32(Address(X86::eax, FIELD_OFFSET(UString::Rep, len)), X86::eax);
    17791779
    1780     Jump string_failureCases3 = ja32(X86::eax, Imm32(JSImmediate::maxImmediateInt));
     1780    Jump string_failureCases3 = branch32(Above, X86::eax, Imm32(JSImmediate::maxImmediateInt));
    17811781
    17821782    // X86::eax contains a 64 bit value (is positive, is zero extended) so we don't need sign extend here.
     
    17931793    loadPtr(Address(X86::ecx, FIELD_OFFSET(JSFunction, m_body)), X86::eax);
    17941794    loadPtr(Address(X86::eax, FIELD_OFFSET(FunctionBodyNode, m_code)), X86::eax);
    1795     Jump hasCodeBlock1 = jnzPtr(X86::eax);
     1795    Jump hasCodeBlock1 = branchTestPtr(NonZero, X86::eax);
    17961796    pop(X86::ebx);
    17971797    restoreArgumentReference();
     
    18031803
    18041804    // Check argCount matches callee arity.
    1805     Jump arityCheckOkay1 = je32(Address(X86::eax, FIELD_OFFSET(CodeBlock, m_numParameters)), X86::edx);
     1805    Jump arityCheckOkay1 = branch32(Equal, Address(X86::eax, FIELD_OFFSET(CodeBlock, m_numParameters)), X86::edx);
    18061806    pop(X86::ebx);
    18071807    emitPutJITStubArg(X86::ebx, 2);
     
    18301830    loadPtr(Address(X86::ecx, FIELD_OFFSET(JSFunction, m_body)), X86::eax);
    18311831    loadPtr(Address(X86::eax, FIELD_OFFSET(FunctionBodyNode, m_code)), X86::eax);
    1832     Jump hasCodeBlock2 = jnzPtr(X86::eax);
     1832    Jump hasCodeBlock2 = branchTestPtr(NonZero, X86::eax);
    18331833    pop(X86::ebx);
    18341834    restoreArgumentReference();
     
    18401840
    18411841    // Check argCount matches callee arity.
    1842     Jump arityCheckOkay2 = je32(Address(X86::eax, FIELD_OFFSET(CodeBlock, m_numParameters)), X86::edx);
     1842    Jump arityCheckOkay2 = branch32(Equal, Address(X86::eax, FIELD_OFFSET(CodeBlock, m_numParameters)), X86::edx);
    18431843    pop(X86::ebx);
    18441844    emitPutJITStubArg(X86::ebx, 2);
     
    18671867    loadPtr(Address(X86::ecx, FIELD_OFFSET(JSFunction, m_body)), X86::eax);
    18681868    loadPtr(Address(X86::eax, FIELD_OFFSET(FunctionBodyNode, m_code)), X86::eax);
    1869     Jump hasCodeBlock3 = jnzPtr(X86::eax);
     1869    Jump hasCodeBlock3 = branchTestPtr(NonZero, X86::eax);
    18701870    pop(X86::ebx);
    18711871    restoreArgumentReference();
     
    18771877
    18781878    // Check argCount matches callee arity.
    1879     Jump arityCheckOkay3 = je32(Address(X86::eax, FIELD_OFFSET(CodeBlock, m_numParameters)), X86::edx);
     1879    Jump arityCheckOkay3 = branch32(Equal, Address(X86::eax, FIELD_OFFSET(CodeBlock, m_numParameters)), X86::edx);
    18801880    pop(X86::ebx);
    18811881    emitPutJITStubArg(X86::ebx, 2);
  • trunk/JavaScriptCore/jit/JITArithmetic.cpp

    r40004 r40562  
    6262    lshift32(X86::ecx, X86::eax);
    6363#if !USE(ALTERNATE_JSIMMEDIATE)
    64     addSlowCase(joAdd32(X86::eax, X86::eax));
     64    addSlowCase(branchAdd32(Overflow, X86::eax, X86::eax));
    6565    signExtend32ToPtr(X86::eax, X86::eax);
    6666#endif
     
    193193    emitJumpSlowCaseIfNotImmediateInteger(X86::ecx);
    194194#if USE(ALTERNATE_JSIMMEDIATE)
    195     addSlowCase(jePtr(X86::ecx, ImmPtr(JSValuePtr::encode(js0()))));
     195    addSlowCase(branchPtr(Equal, X86::ecx, ImmPtr(JSValuePtr::encode(js0()))));
    196196    mod32(X86::ecx, X86::eax, X86::edx);
    197197#else
     
    231231    emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    232232#if USE(ALTERNATE_JSIMMEDIATE)
    233     addSlowCase(joAdd32(Imm32(1), X86::edx));
     233    addSlowCase(branchAdd32(Overflow, Imm32(1), X86::edx));
    234234    emitFastArithIntToImmNoCheck(X86::edx, X86::edx);
    235235#else
    236     addSlowCase(joAdd32(Imm32(1 << JSImmediate::IntegerPayloadShift), X86::edx));
     236    addSlowCase(branchAdd32(Overflow, Imm32(1 << JSImmediate::IntegerPayloadShift), X86::edx));
    237237    signExtend32ToPtr(X86::edx, X86::edx);
    238238#endif
     
    256256    emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    257257#if USE(ALTERNATE_JSIMMEDIATE)
    258     addSlowCase(joSub32(Imm32(1), X86::edx));
     258    addSlowCase(branchSub32(Zero, Imm32(1), X86::edx));
    259259    emitFastArithIntToImmNoCheck(X86::edx, X86::edx);
    260260#else
    261     addSlowCase(joSub32(Imm32(1 << JSImmediate::IntegerPayloadShift), X86::edx));
     261    addSlowCase(branchSub32(Zero, Imm32(1 << JSImmediate::IntegerPayloadShift), X86::edx));
    262262    signExtend32ToPtr(X86::edx, X86::edx);
    263263#endif
     
    280280    emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    281281#if USE(ALTERNATE_JSIMMEDIATE)
    282     addSlowCase(joAdd32(Imm32(1), X86::eax));
     282    addSlowCase(branchAdd32(Overflow, Imm32(1), X86::eax));
    283283    emitFastArithIntToImmNoCheck(X86::eax, X86::eax);
    284284#else
    285     addSlowCase(joAdd32(Imm32(1 << JSImmediate::IntegerPayloadShift), X86::eax));
     285    addSlowCase(branchAdd32(Overflow, Imm32(1 << JSImmediate::IntegerPayloadShift), X86::eax));
    286286    signExtend32ToPtr(X86::eax, X86::eax);
    287287#endif
     
    304304    emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    305305#if USE(ALTERNATE_JSIMMEDIATE)
    306     addSlowCase(joSub32(Imm32(1), X86::eax));
     306    addSlowCase(branchSub32(Zero, Imm32(1), X86::eax));
    307307    emitFastArithIntToImmNoCheck(X86::eax, X86::eax);
    308308#else
    309     addSlowCase(joSub32(Imm32(1 << JSImmediate::IntegerPayloadShift), X86::eax));
     309    addSlowCase(branchSub32(Zero, Imm32(1 << JSImmediate::IntegerPayloadShift), X86::eax));
    310310    signExtend32ToPtr(X86::eax, X86::eax);
    311311#endif
     
    382382    emitJumpSlowCaseIfNotImmediateInteger(X86::edx);
    383383    if (opcodeID == op_add)
    384         addSlowCase(joAdd32(X86::edx, X86::eax));
     384        addSlowCase(branchAdd32(Overflow, X86::edx, X86::eax));
    385385    else if (opcodeID == op_sub)
    386         addSlowCase(joSub32(X86::edx, X86::eax));
     386        addSlowCase(branchSub32(Zero, X86::edx, X86::eax));
    387387    else {
    388388        ASSERT(opcodeID == op_mul);
    389         addSlowCase(joMul32(X86::edx, X86::eax));
    390         addSlowCase(jz32(X86::eax));
     389        addSlowCase(branchMul32(Overflow, X86::edx, X86::eax));
     390        addSlowCase(branchTest32(Zero, X86::eax));
    391391    }
    392392    emitFastArithIntToImmNoCheck(X86::eax, X86::eax);
     
    473473        emitGetVirtualRegister(op2, X86::eax);
    474474        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    475         addSlowCase(joAdd32(Imm32(getConstantOperandImmediateInt(op1)), X86::eax));
     475        addSlowCase(branchAdd32(Overflow, Imm32(getConstantOperandImmediateInt(op1)), X86::eax));
    476476        emitFastArithIntToImmNoCheck(X86::eax, X86::eax);
    477477    } else if (isOperandConstantImmediateInt(op2)) {
    478478        emitGetVirtualRegister(op1, X86::eax);
    479479        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    480         addSlowCase(joAdd32(Imm32(getConstantOperandImmediateInt(op2)), X86::eax));
     480        addSlowCase(branchAdd32(Overflow, Imm32(getConstantOperandImmediateInt(op2)), X86::eax));
    481481        emitFastArithIntToImmNoCheck(X86::eax, X86::eax);
    482482    } else
     
    522522        emitGetVirtualRegister(op2, X86::eax);
    523523        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    524         addSlowCase(joMul32(Imm32(value), X86::eax, X86::eax));
     524        addSlowCase(branchMul32(Overflow, Imm32(value), X86::eax, X86::eax));
    525525        emitFastArithReTagImmediate(X86::eax, X86::eax);
    526526    } else if (isOperandConstantImmediateInt(op2) && ((value = getConstantOperandImmediateInt(op2)) > 0)) {
    527527        emitGetVirtualRegister(op1, X86::eax);
    528528        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    529         addSlowCase(joMul32(Imm32(value), X86::eax, X86::eax));
     529        addSlowCase(branchMul32(Overflow, Imm32(value), X86::eax, X86::eax));
    530530        emitFastArithReTagImmediate(X86::eax, X86::eax);
    531531    } else
     
    861861        emitGetVirtualRegister(op2, X86::eax);
    862862        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    863         addSlowCase(joAdd32(Imm32(getConstantOperandImmediateInt(op1) << JSImmediate::IntegerPayloadShift), X86::eax));
     863        addSlowCase(branchAdd32(Overflow, Imm32(getConstantOperandImmediateInt(op1) << JSImmediate::IntegerPayloadShift), X86::eax));
    864864        signExtend32ToPtr(X86::eax, X86::eax);
    865865        emitPutVirtualRegister(result);
     
    867867        emitGetVirtualRegister(op1, X86::eax);
    868868        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    869         addSlowCase(joAdd32(Imm32(getConstantOperandImmediateInt(op2) << JSImmediate::IntegerPayloadShift), X86::eax));
     869        addSlowCase(branchAdd32(Overflow, Imm32(getConstantOperandImmediateInt(op2) << JSImmediate::IntegerPayloadShift), X86::eax));
    870870        signExtend32ToPtr(X86::eax, X86::eax);
    871871        emitPutVirtualRegister(result);
     
    925925        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    926926        emitFastArithDeTagImmediate(X86::eax);
    927         addSlowCase(joMul32(Imm32(value), X86::eax, X86::eax));
     927        addSlowCase(branchMul32(Overflow, Imm32(value), X86::eax, X86::eax));
    928928        signExtend32ToPtr(X86::eax, X86::eax);
    929929        emitFastArithReTagImmediate(X86::eax, X86::eax);
     
    933933        emitJumpSlowCaseIfNotImmediateInteger(X86::eax);
    934934        emitFastArithDeTagImmediate(X86::eax);
    935         addSlowCase(joMul32(Imm32(value), X86::eax, X86::eax));
     935        addSlowCase(branchMul32(Overflow, Imm32(value), X86::eax, X86::eax));
    936936        signExtend32ToPtr(X86::eax, X86::eax);
    937937        emitFastArithReTagImmediate(X86::eax, X86::eax);
  • trunk/JavaScriptCore/jit/JITCall.cpp

    r40232 r40562  
    134134
    135135        emitCTICall(Interpreter::cti_op_call_eval);
    136         wasEval = jnePtr(X86::eax, ImmPtr(JSValuePtr::encode(jsImpossibleValue())));
     136        wasEval = branchPtr(NotEqual, X86::eax, ImmPtr(JSValuePtr::encode(jsImpossibleValue())));
    137137    }
    138138
     
    146146    // Check for JSFunctions.
    147147    emitJumpSlowCaseIfNotJSCell(X86::ecx);
    148     addSlowCase(jnePtr(Address(X86::ecx), ImmPtr(m_interpreter->m_jsFunctionVptr)));
     148    addSlowCase(branchPtr(NotEqual, Address(X86::ecx), ImmPtr(m_interpreter->m_jsFunctionVptr)));
    149149
    150150    // First, in the case of a construct, allocate the new object.
     
    208208
    209209        emitCTICall(Interpreter::cti_op_call_eval);
    210         wasEval = jnePtr(X86::eax, ImmPtr(JSValuePtr::encode(jsImpossibleValue())));
     210        wasEval = branchPtr(NotEqual, X86::eax, ImmPtr(JSValuePtr::encode(jsImpossibleValue())));
    211211    }
    212212
     
    215215    emitGetVirtualRegister(callee, X86::ecx);
    216216    DataLabelPtr addressOfLinkedFunctionCheck;
    217     Jump jumpToSlow = jnePtrWithPatch(X86::ecx, addressOfLinkedFunctionCheck, ImmPtr(JSValuePtr::encode(jsImpossibleValue())));
     217    Jump jumpToSlow = branchPtrWithPatch(NotEqual, X86::ecx, addressOfLinkedFunctionCheck, ImmPtr(JSValuePtr::encode(jsImpossibleValue())));
    218218    addSlowCase(jumpToSlow);
    219219    ASSERT(differenceBetween(addressOfLinkedFunctionCheck, jumpToSlow) == patchOffsetOpCallCompareToJump);
     
    273273    // Fast check for JS function.
    274274    Jump callLinkFailNotObject = emitJumpIfNotJSCell(X86::ecx);
    275     Jump callLinkFailNotJSFunction = jnePtr(Address(X86::ecx), ImmPtr(m_interpreter->m_jsFunctionVptr));
     275    Jump callLinkFailNotJSFunction = branchPtr(NotEqual, Address(X86::ecx), ImmPtr(m_interpreter->m_jsFunctionVptr));
    276276
    277277    // First, in the case of a construct, allocate the new object.
     
    305305    // Check for JSFunctions.
    306306    Jump isNotObject = emitJumpIfNotJSCell(X86::ecx);
    307     Jump isJSFunction = jePtr(Address(X86::ecx), ImmPtr(m_interpreter->m_jsFunctionVptr));
     307    Jump isJSFunction = branchPtr(Equal, Address(X86::ecx), ImmPtr(m_interpreter->m_jsFunctionVptr));
    308308
    309309    // This handles host functions
  • trunk/JavaScriptCore/jit/JITInlineMethods.h

    r40046 r40562  
    259259ALWAYS_INLINE JIT::Jump JIT::checkStructure(RegisterID reg, Structure* structure)
    260260{
    261     return jnePtr(Address(reg, FIELD_OFFSET(JSCell, m_structure)), ImmPtr(structure));
     261    return branchPtr(NotEqual, Address(reg, FIELD_OFFSET(JSCell, m_structure)), ImmPtr(structure));
    262262}
    263263
     
    265265{
    266266#if USE(ALTERNATE_JSIMMEDIATE)
    267     return jzPtr(reg, tagMaskRegister);
    268 #else
    269     return jz32(reg, Imm32(JSImmediate::TagMask));
     267    return branchTestPtr(Zero, reg, tagMaskRegister);
     268#else
     269    return branchTest32(Zero, reg, Imm32(JSImmediate::TagMask));
    270270#endif
    271271}
     
    286286{
    287287#if USE(ALTERNATE_JSIMMEDIATE)
    288     return jnzPtr(reg, tagMaskRegister);
    289 #else
    290     return jnz32(reg, Imm32(JSImmediate::TagMask));
     288    return branchTestPtr(NonZero, reg, tagMaskRegister);
     289#else
     290    return branchTest32(NonZero, reg, Imm32(JSImmediate::TagMask));
    291291#endif
    292292}
     
    312312ALWAYS_INLINE JIT::Jump JIT::emitJumpIfImmediateNumber(RegisterID reg)
    313313{
    314     return jnzPtr(reg, tagTypeNumberRegister);
     314    return branchTestPtr(NonZero, reg, tagTypeNumberRegister);
    315315}
    316316ALWAYS_INLINE JIT::Jump JIT::emitJumpIfNotImmediateNumber(RegisterID reg)
    317317{
    318     return jzPtr(reg, tagTypeNumberRegister);
     318    return branchTestPtr(Zero, reg, tagTypeNumberRegister);
    319319}
    320320#endif
     
    323323{
    324324#if USE(ALTERNATE_JSIMMEDIATE)
    325     return jaePtr(reg, tagTypeNumberRegister);
    326 #else
    327     return jnz32(reg, Imm32(JSImmediate::TagTypeNumber));
     325    return branchPtr(AboveOrEqual, reg, tagTypeNumberRegister);
     326#else
     327    return branchTest32(NonZero, reg, Imm32(JSImmediate::TagTypeNumber));
    328328#endif
    329329}
     
    332332{
    333333#if USE(ALTERNATE_JSIMMEDIATE)
    334     return jbPtr(reg, tagTypeNumberRegister);
    335 #else
    336     return jz32(reg, Imm32(JSImmediate::TagTypeNumber));
     334    return branchPtr(Below, reg, tagTypeNumberRegister);
     335#else
     336    return branchTest32(Zero, reg, Imm32(JSImmediate::TagTypeNumber));
    337337#endif
    338338}
     
    363363ALWAYS_INLINE JIT::Jump JIT::emitFastArithDeTagImmediateJumpIfZero(RegisterID reg)
    364364{
    365     return jzSubPtr(Imm32(JSImmediate::TagTypeNumber), reg);
     365    return branchSubPtr(Zero, Imm32(JSImmediate::TagTypeNumber), reg);
    366366}
    367367#endif
  • trunk/JavaScriptCore/jit/JITPropertyAccess.cpp

    r39738 r40562  
    104104
    105105    DataLabelPtr structureToCompare;
    106     Jump structureCheck = jnePtrWithPatch(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), structureToCompare, ImmPtr(reinterpret_cast<void*>(patchGetByIdDefaultStructure)));
     106    Jump structureCheck = branchPtrWithPatch(NotEqual, Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), structureToCompare, ImmPtr(reinterpret_cast<void*>(patchGetByIdDefaultStructure)));
    107107    addSlowCase(structureCheck);
    108108    ASSERT(differenceBetween(hotPathBegin, structureToCompare) == patchOffsetGetByIdStructure);
     
    160160    // It is important that the following instruction plants a 32bit immediate, in order that it can be patched over.
    161161    DataLabelPtr structureToCompare;
    162     addSlowCase(jnePtrWithPatch(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), structureToCompare, ImmPtr(reinterpret_cast<void*>(patchGetByIdDefaultStructure))));
     162    addSlowCase(branchPtrWithPatch(NotEqual, Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), structureToCompare, ImmPtr(reinterpret_cast<void*>(patchGetByIdDefaultStructure))));
    163163    ASSERT(differenceBetween(hotPathBegin, structureToCompare) == patchOffsetPutByIdStructure);
    164164
     
    199199    // Check eax is an object of the right Structure.
    200200    failureCases.append(emitJumpIfNotJSCell(X86::eax));
    201     failureCases.append(jnePtr(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), ImmPtr(oldStructure)));
     201    failureCases.append(branchPtr(NotEqual, Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), ImmPtr(oldStructure)));
    202202    JumpList successCases;
    203203
     
    205205    loadPtr(Address(X86::eax, FIELD_OFFSET(JSCell, m_structure)), X86::ecx);
    206206    // proto(ecx) = baseObject->structure()->prototype()
    207     failureCases.append(jne32(Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo) + FIELD_OFFSET(TypeInfo, m_type)), Imm32(ObjectType)));
     207    failureCases.append(branch32(NotEqual, Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo) + FIELD_OFFSET(TypeInfo, m_type)), Imm32(ObjectType)));
    208208
    209209    loadPtr(Address(X86::ecx, FIELD_OFFSET(Structure, m_prototype)), X86::ecx);
     
    212212    for (RefPtr<Structure>* it = chain->head(); *it; ++it) {
    213213        // null check the prototype
    214         successCases.append(jePtr(X86::ecx, ImmPtr(JSValuePtr::encode(jsNull()))));
     214        successCases.append(branchPtr(Equal, X86::ecx, ImmPtr(JSValuePtr::encode(jsNull()))));
    215215
    216216        // Check the structure id
    217         failureCases.append(jnePtr(Address(X86::ecx, FIELD_OFFSET(JSCell, m_structure)), ImmPtr(it->get())));
     217        failureCases.append(branchPtr(NotEqual, Address(X86::ecx, FIELD_OFFSET(JSCell, m_structure)), ImmPtr(it->get())));
    218218       
    219219        loadPtr(Address(X86::ecx, FIELD_OFFSET(JSCell, m_structure)), X86::ecx);
    220         failureCases.append(jne32(Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo) + FIELD_OFFSET(TypeInfo, m_type)), Imm32(ObjectType)));
     220        failureCases.append(branch32(NotEqual, Address(X86::ecx, FIELD_OFFSET(Structure, m_typeInfo) + FIELD_OFFSET(TypeInfo, m_type)), Imm32(ObjectType)));
    221221        loadPtr(Address(X86::ecx, FIELD_OFFSET(Structure, m_prototype)), X86::ecx);
    222222    }
     
    314314
    315315    // Check eax is an array
    316     Jump failureCases1 = jnePtr(Address(X86::eax), ImmPtr(m_interpreter->m_jsArrayVptr));
     316    Jump failureCases1 = branchPtr(NotEqual, Address(X86::eax), ImmPtr(m_interpreter->m_jsArrayVptr));
    317317
    318318    // Checks out okay! - get the length from the storage
     
    320320    load32(Address(X86::ecx, FIELD_OFFSET(ArrayStorage, m_length)), X86::ecx);
    321321
    322     Jump failureCases2 = ja32(X86::ecx, Imm32(JSImmediate::maxImmediateInt));
     322    Jump failureCases2 = branch32(Above, X86::ecx, Imm32(JSImmediate::maxImmediateInt));
    323323
    324324    emitFastArithIntToImmNoCheck(X86::ecx, X86::eax);
     
    386386#if PLATFORM(X86_64)
    387387    move(ImmPtr(prototypeStructure), X86::ebx);
    388     Jump failureCases2 = jnePtr(X86::ebx, AbsoluteAddress(prototypeStructureAddress));
    389 #else
    390     Jump failureCases2 = jnePtr(AbsoluteAddress(prototypeStructureAddress), ImmPtr(prototypeStructure));
     388    Jump failureCases2 = branchPtr(NotEqual, AbsoluteAddress(prototypeStructureAddress), X86::ebx);
     389#else
     390    Jump failureCases2 = branchPtr(NotEqual, AbsoluteAddress(prototypeStructureAddress), ImmPtr(prototypeStructure));
    391391#endif
    392392
     
    427427    // Check the prototype object's Structure had not changed.
    428428    Structure** prototypeStructureAddress = &(protoObject->m_structure);
    429     Jump failureCases3 = jnePtr(AbsoluteAddress(prototypeStructureAddress), ImmPtr(prototypeStructure));
     429    Jump failureCases3 = branchPtr(NotEqual, AbsoluteAddress(prototypeStructureAddress), ImmPtr(prototypeStructure));
    430430
    431431    // Checks out okay! - getDirectOffset
     
    493493#if PLATFORM(X86_64)
    494494    move(ImmPtr(prototypeStructure), X86::ebx);
    495     Jump failureCases2 = jnePtr(X86::ebx, AbsoluteAddress(prototypeStructureAddress));
    496 #else
    497     Jump failureCases2 = jnePtr(AbsoluteAddress(prototypeStructureAddress), ImmPtr(prototypeStructure));
     495    Jump failureCases2 = branchPtr(NotEqual, AbsoluteAddress(prototypeStructureAddress), X86::ebx);
     496#else
     497    Jump failureCases2 = branchPtr(NotEqual, AbsoluteAddress(prototypeStructureAddress), ImmPtr(prototypeStructure));
    498498#endif
    499499
     
    545545#if PLATFORM(X86_64)
    546546        move(ImmPtr(currStructure), X86::ebx);
    547         bucketsOfFail.append(jnePtr(X86::ebx, AbsoluteAddress(prototypeStructureAddress)));
    548 #else
    549         bucketsOfFail.append(jnePtr(AbsoluteAddress(prototypeStructureAddress), ImmPtr(currStructure)));
     547        bucketsOfFail.append(branchPtr(NotEqual, AbsoluteAddress(prototypeStructureAddress), X86::ebx));
     548#else
     549        bucketsOfFail.append(branchPtr(NotEqual, AbsoluteAddress(prototypeStructureAddress), ImmPtr(currStructure)));
    550550#endif
    551551    }
     
    604604#if PLATFORM(X86_64)
    605605        move(ImmPtr(currStructure), X86::ebx);
    606         bucketsOfFail.append(jnePtr(X86::ebx, AbsoluteAddress(prototypeStructureAddress)));
    607 #else
    608         bucketsOfFail.append(jnePtr(AbsoluteAddress(prototypeStructureAddress), ImmPtr(currStructure)));
     606        bucketsOfFail.append(branchPtr(NotEqual, AbsoluteAddress(prototypeStructureAddress), X86::ebx));
     607#else
     608        bucketsOfFail.append(branchPtr(NotEqual, AbsoluteAddress(prototypeStructureAddress), ImmPtr(currStructure)));
    609609#endif
    610610    }
     
    654654#if PLATFORM(X86_64)
    655655        move(ImmPtr(currStructure), X86::ebx);
    656         bucketsOfFail.append(jnePtr(X86::ebx, AbsoluteAddress(prototypeStructureAddress)));
    657 #else
    658         bucketsOfFail.append(jnePtr(AbsoluteAddress(prototypeStructureAddress), ImmPtr(currStructure)));
     656        bucketsOfFail.append(branchPtr(NotEqual, X86::ebx, AbsoluteAddress(prototypeStructureAddress)));
     657#else
     658        bucketsOfFail.append(branchPtr(NotEqual, AbsoluteAddress(prototypeStructureAddress), ImmPtr(currStructure)));
    659659#endif
    660660    }
  • trunk/JavaScriptCore/runtime/RegExp.cpp

    r39809 r40562  
    124124        int offsetVectorSize = (m_numSubpatterns + 1) * 2;
    125125        int* offsetVector = new int [offsetVectorSize];
     126        ASSERT(offsetVector);
    126127        for (int j = 0; j < offsetVectorSize; ++j)
    127128            offsetVector[j] = -1;
  • trunk/JavaScriptCore/wrec/WRECGenerator.cpp

    r40522 r40562  
    6868#endif
    6969#endif
    70 
    71 #ifndef NDEBUG
    72     // ASSERT that the output register is not null.
    73     Jump outputNotNull = jnzPtr(output);
    74     breakpoint();
    75     outputNotNull.link(this);
    76 #endif
    7770}
    7871
     
    10194    peek(index);
    10295    if (failure)
    103         *failure = je32(length, index);
     96        *failure = branch32(Equal, length, index);
    10497    add32(Imm32(1), index);
    10598    poke(index);
     
    108101void Generator::generateLoadCharacter(JumpList& failures)
    109102{
    110     failures.append(je32(length, index));
     103    failures.append(branch32(Equal, length, index));
    111104    load16(BaseIndex(input, index, TimesTwo), character);
    112105}
     
    116109void Generator::generateJumpIfNotEndOfInput(Label target)
    117110{
    118     jle32(index, length, target);
     111    branch32(LessThanOrEqual, index, length, target);
    119112}
    120113
     
    146139
    147140    load32(Address(output, (2 * subpatternId) * sizeof(int)), character);
    148     Jump skipIfEmpty = je32(Address(output, ((2 * subpatternId) + 1) * sizeof(int)), character);
     141    Jump skipIfEmpty = branch32(Equal, Address(output, ((2 * subpatternId) + 1) * sizeof(int)), character);
    149142
    150143    ASSERT(quantifierType == Quantifier::Greedy || quantifierType == Quantifier::NonGreedy);
     
    176169    pop(index);
    177170    if (max != Quantifier::Infinity)
    178         je32(repeatCount, Imm32(max), quantifierFailed);
     171        branch32(Equal, repeatCount, Imm32(max), quantifierFailed);
    179172
    180173    // (1) Read an atom.
     
    188181    // (2) Keep reading if we're under the minimum.
    189182    if (min > 1)
    190         jl32(repeatCount, Imm32(min), readAtom);
     183        branch32(LessThan, repeatCount, Imm32(min), readAtom);
    191184
    192185    // (3) Test the rest of the alternative.
     
    222215        doneReadingAtomsList.append(jump());
    223216    else {
    224         jne32(repeatCount, Imm32(max), readAtom);
     217        branch32(NotEqual, repeatCount, Imm32(max), readAtom);
    225218        doneReadingAtomsList.append(jump());
    226219    }
     
    239232    // (2) Verify that we have enough atoms.
    240233    doneReadingAtomsList.link(this);
    241     jl32(repeatCount, Imm32(min), quantifierFailed);
     234    branch32(LessThan, repeatCount, Imm32(min), quantifierFailed);
    242235
    243236    // (3) Test the rest of the alternative.
     
    278271    // Optimistically consume 2 characters.
    279272    add32(Imm32(2), index);
    280     failures.append(jg32(index, length));
     273    failures.append(branch32(GreaterThan, index, length));
    281274
    282275    // Load the characters we just consumed, offset -2 characters from index.
     
    307300    int pair = ch1 | (ch2 << 16);
    308301
    309     failures.append(jne32(character, Imm32(pair)));
     302    failures.append(branch32(NotEqual, character, Imm32(pair)));
    310303    return true;
    311304}
     
    329322        } else if (!isASCII(ch) && ((lower = Unicode::toLower(ch)) != (upper = Unicode::toUpper(ch)))) {
    330323            // handle unicode case sentitive characters - branch to success on upper
    331             isUpper = je32(character, Imm32(upper));
     324            isUpper = branch32(Equal, character, Imm32(upper));
    332325            hasUpper = true;
    333326            ch = lower;
     
    336329   
    337330    // checks for ch, or lower case version of ch, if insensitive
    338     failures.append(jne32(character, Imm32((unsigned short)ch)));
     331    failures.append(branch32(NotEqual, character, Imm32((unsigned short)ch)));
    339332
    340333    if (m_parser.ignoreCase() && hasUpper) {
     
    358351        // if there is anything else to check, check that first, if it falls through jmp to failure.
    359352        if ((*matchIndex < matchCount) && (matches[*matchIndex] < lo)) {
    360             Jump loOrAbove = jge32(character, Imm32((unsigned short)lo));
     353            Jump loOrAbove = branch32(GreaterThanOrEqual, character, Imm32((unsigned short)lo));
    361354           
    362355            // generate code for all ranges before this one
     
    365358           
    366359            while ((*matchIndex < matchCount) && (matches[*matchIndex] < lo)) {
    367                 matchDest.append(je32(character, Imm32((unsigned short)matches[*matchIndex])));
     360                matchDest.append(branch32(Equal, character, Imm32((unsigned short)matches[*matchIndex])));
    368361                ++*matchIndex;
    369362            }
     
    372365            loOrAbove.link(this);
    373366        } else if (which) {
    374             Jump loOrAbove = jge32(character, Imm32((unsigned short)lo));
     367            Jump loOrAbove = branch32(GreaterThanOrEqual, character, Imm32((unsigned short)lo));
    375368
    376369            generateCharacterClassInvertedRange(failures, matchDest, ranges, which, matchIndex, matches, matchCount);
     
    379372            loOrAbove.link(this);
    380373        } else
    381             failures.append(jl32(character, Imm32((unsigned short)lo)));
     374            failures.append(branch32(LessThan, character, Imm32((unsigned short)lo)));
    382375
    383376        while ((*matchIndex < matchCount) && (matches[*matchIndex] <= hi))
    384377            ++*matchIndex;
    385378
    386         matchDest.append(jle32(character, Imm32((unsigned short)hi)));
     379        matchDest.append(branch32(LessThanOrEqual, character, Imm32((unsigned short)hi)));
    387380        // fall through to here, the value is above hi.
    388381
     
    398391    Jump unicodeFail;
    399392    if (charClass.numMatchesUnicode || charClass.numRangesUnicode) {
    400         Jump isAscii = jle32(character, Imm32(0x7f));
     393        Jump isAscii = branch32(LessThanOrEqual, character, Imm32(0x7f));
    401394   
    402395        if (charClass.numMatchesUnicode) {
    403396            for (unsigned i = 0; i < charClass.numMatchesUnicode; ++i) {
    404397                UChar ch = charClass.matchesUnicode[i];
    405                 matchDest.append(je32(character, Imm32(ch)));
     398                matchDest.append(branch32(Equal, character, Imm32(ch)));
    406399            }
    407400        }
     
    412405                UChar hi = charClass.rangesUnicode[i].end;
    413406               
    414                 Jump below = jl32(character, Imm32(lo));
    415                 matchDest.append(jle32(character, Imm32(hi)));
     407                Jump below = branch32(LessThan, character, Imm32(lo));
     408                matchDest.append(branch32(LessThanOrEqual, character, Imm32(hi)));
    416409                below.link(this);
    417410            }
     
    427420        generateCharacterClassInvertedRange(failures, matchDest, charClass.ranges, charClass.numRanges, &matchIndex, charClass.matches, charClass.numMatches);
    428421        while (matchIndex < charClass.numMatches)
    429             matchDest.append(je32(character, Imm32((unsigned short)charClass.matches[matchIndex++])));
     422            matchDest.append(branch32(Equal, character, Imm32((unsigned short)charClass.matches[matchIndex++])));
    430423
    431424        failures.link(this);
     
    444437                    continue;
    445438            }
    446             matchDest.append(je32(character, Imm32((unsigned short)ch)));
     439            matchDest.append(branch32(Equal, character, Imm32((unsigned short)ch)));
    447440        }
    448441
     
    450443            or32(Imm32(32), character);
    451444            for (unsigned i = 0; i < countAZaz; ++i)
    452                 matchDest.append(je32(character, Imm32(matchesAZaz[i])));
     445                matchDest.append(branch32(Equal, character, Imm32(matchesAZaz[i])));
    453446        }
    454447    }
     
    534527
    535528        // begin of input == success
    536         previousIsNewline.append(je32(index, Imm32(0)));
     529        previousIsNewline.append(branch32(Equal, index, Imm32(0)));
    537530
    538531        // now check prev char against newline characters.
     
    544537        previousIsNewline.link(this);
    545538    } else
    546         failures.append(jne32(index, Imm32(0)));
     539        failures.append(branch32(NotEqual, index, Imm32(0)));
    547540}
    548541
     
    557550        nextIsNewline.link(this);
    558551    } else {
    559         failures.append(jne32(length, index));
     552        failures.append(branch32(NotEqual, length, index));
    560553    }
    561554}
     
    569562
    570563    // (1.1) check for begin of input
    571     Jump atBegin = je32(index, Imm32(0));
     564    Jump atBegin = branch32(Equal, index, Imm32(0));
    572565    // (1.2) load the last char, and chck if is word character
    573566    load16(BaseIndex(input, index, TimesTwo, -2), character);
     
    626619
    627620    // check if we're at the end of backref (if we are, success!)
    628     Jump endOfBackRef = je32(Address(output, ((2 * subpatternId) + 1) * sizeof(int)), repeatCount);
     621    Jump endOfBackRef = branch32(Equal, Address(output, ((2 * subpatternId) + 1) * sizeof(int)), repeatCount);
    629622
    630623    load16(BaseIndex(input, repeatCount, MacroAssembler::TimesTwo), character);
    631624
    632625    // check if we've run out of input (this would be a can o'fail)
    633     Jump endOfInput = je32(length, index);
    634 
    635     je16(character, BaseIndex(input, index, TimesTwo), topOfLoop);
     626    Jump endOfInput = branch32(Equal, length, index);
     627
     628    branch16(Equal, BaseIndex(input, index, TimesTwo), character, topOfLoop);
    636629
    637630    endOfInput.link(this);
Note: See TracChangeset for help on using the changeset viewer.