Changeset 33340

Show
Ignore:
Timestamp:
05/12/08 23:04:08 (6 months ago)
Author:
mrowe@apple.com
Message:

2008-05-04 Maciej Stachowiak <mjs@apple.com>

Reviewed by Geoff.

  • document some more opcodes (and fix argument names)

Added docs for eq, neq, stricteq, nstriceq, less and lesseq.

  • VM/CodeGenerator.cpp: (KJS::CodeGenerator::emitEqual): (KJS::CodeGenerator::emitNotEqual): (KJS::CodeGenerator::emitStrictEqual): (KJS::CodeGenerator::emitNotStrictEqual): (KJS::CodeGenerator::emitLess): (KJS::CodeGenerator::emitLessEq):
  • VM/CodeGenerator.h:
  • VM/Machine.cpp: (KJS::Machine::privateExecute):
  • kjs/nodes.cpp: (KJS::LessNode::emitCode): (KJS::GreaterNode::emitCode): (KJS::LessEqNode::emitCode): (KJS::GreaterEqNode::emitCode): (KJS::EqualNode::emitCode): (KJS::NotEqualNode::emitCode): (KJS::StrictEqualNode::emitCode): (KJS::NotStrictEqualNode::emitCode): (KJS::CaseBlockNode::emitCodeForBlock):
Location:
branches/squirrelfish/JavaScriptCore
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • branches/squirrelfish/JavaScriptCore/ChangeLog

    r33339 r33340  
     12008-05-04  Maciej Stachowiak  <mjs@apple.com> 
     2 
     3        Reviewed by Geoff. 
     4         
     5        - document some more opcodes (and fix argument names) 
     6         
     7        Added docs for eq, neq, stricteq, nstriceq, less and lesseq. 
     8 
     9        * VM/CodeGenerator.cpp: 
     10        (KJS::CodeGenerator::emitEqual): 
     11        (KJS::CodeGenerator::emitNotEqual): 
     12        (KJS::CodeGenerator::emitStrictEqual): 
     13        (KJS::CodeGenerator::emitNotStrictEqual): 
     14        (KJS::CodeGenerator::emitLess): 
     15        (KJS::CodeGenerator::emitLessEq): 
     16        * VM/CodeGenerator.h: 
     17        * VM/Machine.cpp: 
     18        (KJS::Machine::privateExecute): 
     19        * kjs/nodes.cpp: 
     20        (KJS::LessNode::emitCode): 
     21        (KJS::GreaterNode::emitCode): 
     22        (KJS::LessEqNode::emitCode): 
     23        (KJS::GreaterEqNode::emitCode): 
     24        (KJS::EqualNode::emitCode): 
     25        (KJS::NotEqualNode::emitCode): 
     26        (KJS::StrictEqualNode::emitCode): 
     27        (KJS::NotStrictEqualNode::emitCode): 
     28        (KJS::CaseBlockNode::emitCodeForBlock): 
     29 
    1302008-05-04  Geoffrey Garen  <ggaren@apple.com> 
    231 
  • branches/squirrelfish/JavaScriptCore/VM/CodeGenerator.cpp

    r33339 r33340  
    431431} 
    432432 
    433 RegisterID* CodeGenerator::emitEqual(RegisterID* r0, RegisterID* r1, RegisterID* r2) 
     433RegisterID* CodeGenerator::emitEqual(RegisterID* dst, RegisterID* src1, RegisterID* src2) 
    434434{ 
    435435    instructions().append(machine().getOpcode(op_eq)); 
    436     instructions().append(r0->index()); 
    437     instructions().append(r1->index()); 
    438     instructions().append(r2->index()); 
    439     return r0; 
    440 } 
    441  
    442 RegisterID* CodeGenerator::emitNotEqual(RegisterID* r0, RegisterID* r1, RegisterID* r2) 
     436    instructions().append(dst->index()); 
     437    instructions().append(src1->index()); 
     438    instructions().append(src2->index()); 
     439    return dst; 
     440} 
     441 
     442RegisterID* CodeGenerator::emitNotEqual(RegisterID* dst, RegisterID* src1, RegisterID* src2) 
    443443{ 
    444444    instructions().append(machine().getOpcode(op_neq)); 
    445     instructions().append(r0->index()); 
    446     instructions().append(r1->index()); 
    447     instructions().append(r2->index()); 
    448     return r0; 
    449 } 
    450  
    451 RegisterID* CodeGenerator::emitStrictEqual(RegisterID* r0, RegisterID* r1, RegisterID* r2) 
     445    instructions().append(dst->index()); 
     446    instructions().append(src1->index()); 
     447    instructions().append(src2->index()); 
     448    return dst; 
     449} 
     450 
     451RegisterID* CodeGenerator::emitStrictEqual(RegisterID* dst, RegisterID* src1, RegisterID* src2) 
    452452{ 
    453453    instructions().append(machine().getOpcode(op_stricteq)); 
    454     instructions().append(r0->index()); 
    455     instructions().append(r1->index()); 
    456     instructions().append(r2->index()); 
    457     return r0; 
    458 } 
    459  
    460 RegisterID* CodeGenerator::emitNotStrictEqual(RegisterID* r0, RegisterID* r1, RegisterID* r2) 
     454    instructions().append(dst->index()); 
     455    instructions().append(src1->index()); 
     456    instructions().append(src2->index()); 
     457    return dst; 
     458} 
     459 
     460RegisterID* CodeGenerator::emitNotStrictEqual(RegisterID* dst, RegisterID* src1, RegisterID* src2) 
    461461{ 
    462462    instructions().append(machine().getOpcode(op_nstricteq)); 
    463     instructions().append(r0->index()); 
    464     instructions().append(r1->index()); 
    465     instructions().append(r2->index()); 
    466     return r0; 
    467 } 
    468  
    469 RegisterID* CodeGenerator::emitLess(RegisterID* r0, RegisterID* r1, RegisterID* r2) 
     463    instructions().append(dst->index()); 
     464    instructions().append(src1->index()); 
     465    instructions().append(src2->index()); 
     466    return dst; 
     467} 
     468 
     469RegisterID* CodeGenerator::emitLess(RegisterID* dst, RegisterID* src1, RegisterID* src2) 
    470470{ 
    471471    instructions().append(machine().getOpcode(op_less)); 
    472     instructions().append(r0->index()); 
    473     instructions().append(r1->index()); 
    474     instructions().append(r2->index()); 
    475     return r0; 
    476 } 
    477  
    478 RegisterID* CodeGenerator::emitLessEq(RegisterID* r0, RegisterID* r1, RegisterID* r2) 
     472    instructions().append(dst->index()); 
     473    instructions().append(src1->index()); 
     474    instructions().append(src2->index()); 
     475    return dst; 
     476} 
     477 
     478RegisterID* CodeGenerator::emitLessEq(RegisterID* dst, RegisterID* src1, RegisterID* src2) 
    479479{ 
    480480    instructions().append(machine().getOpcode(op_lesseq)); 
    481     instructions().append(r0->index()); 
    482     instructions().append(r1->index()); 
    483     instructions().append(r2->index()); 
    484     return r0; 
     481    instructions().append(dst->index()); 
     482    instructions().append(src1->index()); 
     483    instructions().append(src2->index()); 
     484    return dst; 
    485485} 
    486486 
  • branches/squirrelfish/JavaScriptCore/VM/CodeGenerator.h

    r33335 r33340  
    156156 
    157157        RegisterID* emitNot(RegisterID* dst, RegisterID* src); 
    158         RegisterID* emitEqual(RegisterID*, RegisterID*, RegisterID*); 
    159         RegisterID* emitNotEqual(RegisterID*, RegisterID*, RegisterID*); 
    160         RegisterID* emitStrictEqual(RegisterID*, RegisterID*, RegisterID*); 
    161         RegisterID* emitNotStrictEqual(RegisterID*, RegisterID*, RegisterID*); 
    162         RegisterID* emitLess(RegisterID*, RegisterID*, RegisterID*); 
    163         RegisterID* emitLessEq(RegisterID*, RegisterID*, RegisterID*); 
     158        RegisterID* emitEqual(RegisterID* dst, RegisterID* src1, RegisterID* src2); 
     159        RegisterID* emitNotEqual(RegisterID* dst, RegisterID* src1, RegisterID* src2); 
     160        RegisterID* emitStrictEqual(RegisterID* dst, RegisterID* src1, RegisterID* src2); 
     161        RegisterID* emitNotStrictEqual(RegisterID* dst, RegisterID* src1, RegisterID* src2); 
     162        RegisterID* emitLess(RegisterID* dst, RegisterID* src1, RegisterID* src2); 
     163        RegisterID* emitLessEq(RegisterID* dst, RegisterID* src1, RegisterID* src2); 
    164164 
    165165        RegisterID* emitToJSNumber(RegisterID* dst, RegisterID* src); 
  • branches/squirrelfish/JavaScriptCore/VM/Machine.cpp

    r33339 r33340  
    822822    } 
    823823    BEGIN_OPCODE(op_eq) { 
    824         int r0 = (++vPC)->u.operand; 
    825         int r1 = (++vPC)->u.operand; 
    826         int r2 = (++vPC)->u.operand; 
    827         r[r0].u.jsValue = jsBoolean(equal(exec, r[r1].u.jsValue, r[r2].u.jsValue)); 
     824        /* eq dst(r) src1(r) src2(r) 
     825 
     826           Checks whether register src1 and register src2 are equal, 
     827           as with the ECMAScript '==' operator, and puts the result 
     828           as a boolean in register dst. 
     829        */ 
     830        int dst = (++vPC)->u.operand; 
     831        int src1 = (++vPC)->u.operand; 
     832        int src2 = (++vPC)->u.operand; 
     833        r[dst].u.jsValue = jsBoolean(equal(exec, r[src1].u.jsValue, r[src2].u.jsValue)); 
    828834 
    829835        ++vPC; 
     
    831837    } 
    832838    BEGIN_OPCODE(op_neq) { 
    833         int r0 = (++vPC)->u.operand; 
    834         int r1 = (++vPC)->u.operand; 
    835         int r2 = (++vPC)->u.operand; 
    836         r[r0].u.jsValue = jsBoolean(!equal(exec, r[r1].u.jsValue, r[r2].u.jsValue)); 
     839        /* neq dst(r) src1(r) src2(r) 
     840 
     841           Checks whether register src1 and register src2 are not 
     842           equal, as with the ECMAScript '!=' operator, and puts the 
     843           result as a boolean in register dst. 
     844        */ 
     845        int dst = (++vPC)->u.operand; 
     846        int src1 = (++vPC)->u.operand; 
     847        int src2 = (++vPC)->u.operand; 
     848        r[dst].u.jsValue = jsBoolean(!equal(exec, r[src1].u.jsValue, r[src2].u.jsValue)); 
    837849 
    838850        ++vPC; 
     
    840852    } 
    841853    BEGIN_OPCODE(op_stricteq) { 
    842         int r0 = (++vPC)->u.operand; 
    843         int r1 = (++vPC)->u.operand; 
    844         int r2 = (++vPC)->u.operand; 
    845         r[r0].u.jsValue = jsBoolean(strictEqual(exec, r[r1].u.jsValue, r[r2].u.jsValue)); 
     854        /* stricteq dst(r) src1(r) src2(r) 
     855 
     856           Checks whether register src1 and register src2 are strictly 
     857           equal, as with the ECMAScript '===' operator, and puts the 
     858           result as a boolean in register dst. 
     859        */ 
     860        int dst = (++vPC)->u.operand; 
     861        int src1 = (++vPC)->u.operand; 
     862        int src2 = (++vPC)->u.operand; 
     863        r[dst].u.jsValue = jsBoolean(strictEqual(exec, r[src1].u.jsValue, r[src2].u.jsValue)); 
    846864 
    847865        ++vPC; 
     
    849867    } 
    850868    BEGIN_OPCODE(op_nstricteq) { 
    851         int r0 = (++vPC)->u.operand; 
    852         int r1 = (++vPC)->u.operand; 
    853         int r2 = (++vPC)->u.operand; 
    854         r[r0].u.jsValue = jsBoolean(!strictEqual(exec, r[r1].u.jsValue, r[r2].u.jsValue)); 
     869        /* nstricteq dst(r) src1(r) src2(r) 
     870 
     871           Checks whether register src1 and register src2 are not 
     872           strictly equal, as with the ECMAScript '!==' operator, and 
     873           puts the result as a boolean in register dst. 
     874        */ 
     875        int dst = (++vPC)->u.operand; 
     876        int src1 = (++vPC)->u.operand; 
     877        int src2 = (++vPC)->u.operand; 
     878        r[dst].u.jsValue = jsBoolean(!strictEqual(exec, r[src1].u.jsValue, r[src2].u.jsValue)); 
    855879 
    856880        ++vPC; 
     
    858882    } 
    859883    BEGIN_OPCODE(op_less) { 
    860         int r0 = (++vPC)->u.operand; 
    861         int r1 = (++vPC)->u.operand; 
    862         int r2 = (++vPC)->u.operand; 
    863         r[r0].u.jsValue = jsBoolean(jsLess(exec, r[r1].u.jsValue, r[r2].u.jsValue)); 
     884        /* less dst(r) src1(r) src2(r) 
     885 
     886           Checks whether register src1 is less than register src2, as 
     887           with the ECMAScript '<' operator, and puts the result as 
     888           a boolean in register dst. 
     889        */ 
     890        int dst = (++vPC)->u.operand; 
     891        int src1 = (++vPC)->u.operand; 
     892        int src2 = (++vPC)->u.operand; 
     893        r[dst].u.jsValue = jsBoolean(jsLess(exec, r[src1].u.jsValue, r[src2].u.jsValue)); 
    864894 
    865895        ++vPC; 
     
    867897    } 
    868898    BEGIN_OPCODE(op_lesseq) { 
    869         int r0 = (++vPC)->u.operand; 
    870         int r1 = (++vPC)->u.operand; 
    871         int r2 = (++vPC)->u.operand; 
    872         r[r0].u.jsValue = jsBoolean(jsLessEq(exec, r[r1].u.jsValue, r[r2].u.jsValue)); 
     899        /* lesseq dst(r) src1(r) src2(r) 
     900 
     901           Checks whether register src1 is less than or equal to 
     902           register src2, as with the ECMAScript '<=' operator, and 
     903           puts the result as a boolean in register dst. 
     904        */ 
     905        int dst = (++vPC)->u.operand; 
     906        int src1 = (++vPC)->u.operand; 
     907        int src2 = (++vPC)->u.operand; 
     908        r[dst].u.jsValue = jsBoolean(jsLessEq(exec, r[src1].u.jsValue, r[src2].u.jsValue)); 
    873909 
    874910        ++vPC; 
     
    12951331    } 
    12961332    BEGIN_OPCODE(op_get_by_id) { 
    1297         /* get_prop_id dst(r) base(r) property(id) 
     1333        /* get_by_id dst(r) base(r) property(id) 
    12981334 
    12991335           Converts register base to Object, gets the property 
  • branches/squirrelfish/JavaScriptCore/kjs/nodes.cpp

    r33337 r33340  
    33403340RegisterID* LessNode::emitCode(CodeGenerator& generator, RegisterID* dst) 
    33413341{ 
    3342     RefPtr<RegisterID> r0 = generator.emitNode(m_expr1.get()); 
    3343     RegisterID* r1 = generator.emitNode(m_expr2.get()); 
    3344     return generator.emitLess(generator.finalDestination(dst, r0.get()), r0.get(), r1); 
     3342    RefPtr<RegisterID> src1 = generator.emitNode(m_expr1.get()); 
     3343    RegisterID* src2 = generator.emitNode(m_expr2.get()); 
     3344    return generator.emitLess(generator.finalDestination(dst, src1.get()), src1.get(), src2); 
    33453345} 
    33463346 
     
    34093409RegisterID* GreaterNode::emitCode(CodeGenerator& generator, RegisterID* dst) 
    34103410{ 
    3411     RefPtr<RegisterID> r0 = generator.emitNode(m_expr2.get()); 
    3412     RegisterID* r1 = generator.emitNode(m_expr1.get()); 
    3413     return generator.emitLess(generator.finalDestination(dst, r0.get()), r0.get(), r1); 
     3411    RefPtr<RegisterID> src1 = generator.emitNode(m_expr2.get()); 
     3412    RegisterID* src2 = generator.emitNode(m_expr1.get()); 
     3413    return generator.emitLess(generator.finalDestination(dst, src1.get()), src1.get(), src2); 
    34143414} 
    34153415 
     
    34423442RegisterID* LessEqNode::emitCode(CodeGenerator& generator, RegisterID* dst) 
    34433443{ 
    3444     RefPtr<RegisterID> r0 = generator.emitNode(m_expr1.get()); 
    3445     RegisterID* r1 = generator.emitNode(m_expr2.get()); 
    3446     return generator.emitLessEq(generator.finalDestination(dst, r0.get()), r0.get(), r1); 
     3444    RefPtr<RegisterID> src1 = generator.emitNode(m_expr1.get()); 
     3445    RegisterID* src2 = generator.emitNode(m_expr2.get()); 
     3446    return generator.emitLessEq(generator.finalDestination(dst, src1.get()), src1.get(), src2); 
    34473447} 
    34483448 
     
    34753475RegisterID* GreaterEqNode::emitCode(CodeGenerator& generator, RegisterID* dst) 
    34763476{ 
    3477     RefPtr<RegisterID> r0 = generator.emitNode(m_expr2.get()); 
    3478     RegisterID* r1 = generator.emitNode(m_expr1.get()); 
    3479     return generator.emitLessEq(generator.finalDestination(dst, r0.get()), r0.get(), r1); 
     3477    RefPtr<RegisterID> src1 = generator.emitNode(m_expr2.get()); 
     3478    RegisterID* src2 = generator.emitNode(m_expr1.get()); 
     3479    return generator.emitLessEq(generator.finalDestination(dst, src1.get()), src1.get(), src2); 
    34803480} 
    34813481 
     
    36123612RegisterID* EqualNode::emitCode(CodeGenerator& generator, RegisterID* dst) 
    36133613{ 
    3614     RefPtr<RegisterID> r0 = generator.emitNode(m_expr1.get()); 
    3615     RegisterID* r1 = generator.emitNode(m_expr2.get()); 
    3616     return generator.emitEqual(generator.finalDestination(dst, r0.get()), r0.get(), r1); 
     3614    RefPtr<RegisterID> src1 = generator.emitNode(m_expr1.get()); 
     3615    RegisterID* src2 = generator.emitNode(m_expr2.get()); 
     3616    return generator.emitEqual(generator.finalDestination(dst, src1.get()), src1.get(), src2); 
    36173617} 
    36183618 
     
    36463646RegisterID* NotEqualNode::emitCode(CodeGenerator& generator, RegisterID* dst) 
    36473647{ 
    3648     RefPtr<RegisterID> r0 = generator.emitNode(m_expr1.get()); 
    3649     RegisterID* r1 = generator.emitNode(m_expr2.get()); 
    3650     return generator.emitNotEqual(generator.finalDestination(dst, r0.get()), r0.get(), r1); 
     3648    RefPtr<RegisterID> src1 = generator.emitNode(m_expr1.get()); 
     3649    RegisterID* src2 = generator.emitNode(m_expr2.get()); 
     3650    return generator.emitNotEqual(generator.finalDestination(dst, src1.get()), src1.get(), src2); 
    36513651} 
    36523652 
     
    36803680RegisterID* StrictEqualNode::emitCode(CodeGenerator& generator, RegisterID* dst) 
    36813681{ 
    3682     RefPtr<RegisterID> r0 = generator.emitNode(m_expr1.get()); 
    3683     RegisterID* r1 = generator.emitNode(m_expr2.get()); 
    3684     return generator.emitStrictEqual(generator.finalDestination(dst, r0.get()), r0.get(), r1); 
     3682    RefPtr<RegisterID> src1 = generator.emitNode(m_expr1.get()); 
     3683    RegisterID* src2 = generator.emitNode(m_expr2.get()); 
     3684    return generator.emitStrictEqual(generator.finalDestination(dst, src1.get()), src1.get(), src2); 
    36853685} 
    36863686 
     
    37143714RegisterID* NotStrictEqualNode::emitCode(CodeGenerator& generator, RegisterID* dst) 
    37153715{ 
    3716     RefPtr<RegisterID> r0 = generator.emitNode(m_expr1.get()); 
    3717     RegisterID* r1 = generator.emitNode(m_expr2.get()); 
    3718     return generator.emitNotStrictEqual(generator.finalDestination(dst, r0.get()), r0.get(), r1); 
     3716    RefPtr<RegisterID> src1 = generator.emitNode(m_expr1.get()); 
     3717    RegisterID* src2 = generator.emitNode(m_expr2.get()); 
     3718    return generator.emitNotStrictEqual(generator.finalDestination(dst, src1.get()), src1.get(), src2); 
    37193719} 
    37203720 
     
    53995399    // Setup jumps 
    54005400    for (ClauseListNode* list = m_list1.get(); list; list = list->getNext()) { 
    5401         RegisterID* r0 = generator.emitNode(list->getClause()->expr()); 
    5402         generator.emitStrictEqual(r0, r0, switchExpression); 
     5401        RegisterID* clauseVal = generator.emitNode(list->getClause()->expr()); 
     5402        generator.emitStrictEqual(clauseVal, clauseVal, switchExpression); 
    54035403        labelVector.append(generator.newLabel()); 
    5404         generator.emitJumpIfTrue(r0, labelVector[labelVector.size() - 1].get()); 
     5404        generator.emitJumpIfTrue(clauseVal, labelVector[labelVector.size() - 1].get()); 
    54055405    } 
    54065406 
    54075407    for (ClauseListNode* list = m_list2.get(); list; list = list->getNext()) { 
    5408         RegisterID* r0 = generator.emitNode(list->getClause()->expr()); 
    5409         generator.emitStrictEqual(r0, r0, switchExpression); 
     5408        RegisterID* clauseVal = generator.emitNode(list->getClause()->expr()); 
     5409        generator.emitStrictEqual(clauseVal, clauseVal, switchExpression); 
    54105410        labelVector.append(generator.newLabel()); 
    5411         generator.emitJumpIfTrue(r0, labelVector[labelVector.size() - 1].get()); 
     5411        generator.emitJumpIfTrue(clauseVal, labelVector[labelVector.size() - 1].get()); 
    54125412    } 
    54135413