Ignore:
Timestamp:
Aug 15, 2011, 4:44:41 PM (14 years ago)
Author:
[email protected]
Message:

https://bugs.webkit.org/show_bug.cgi?id=66263
DFG JIT does not always zero extend boolean result of DFG operations

Reviewed by Sam Weinig.

Source/JavaScriptCore:

  • dfg/DFGOperations.cpp:
  • dfg/DFGOperations.h:
    • Change bool return values to a 64-bit type.

LayoutTests:

  • fast/js/kde/script-tests/operators.js:

(nonSpeculativeNotInner):
(nonSpeculativeNot):
(nonSpeculativeLessInner):
(nonSpeculativeLess):
(nonSpeculativeLessEqInner):
(nonSpeculativeLessEq):
(nonSpeculativeGreaterInner):
(nonSpeculativeGreater):
(nonSpeculativeGreaterEqInner):
(nonSpeculativeGreaterEq):
(nonSpeculativeEqualInner):
(nonSpeculativeEqual):
(nonSpeculativeNotEqualInner):
(nonSpeculativeNotEqual):
(nonSpeculativeStrictEqualInner):
(nonSpeculativeStrictEqual):
(nonSpeculativeStrictNotEqualInner):
(nonSpeculativeStrictNotEqual):

  • Add tests cases that will hit the non-spec path.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp

    r92569 r93070  
    398398}
    399399
    400 bool operationCompareLess(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)
     400RegisterSizedBoolean operationCompareLess(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)
    401401{
    402402    return jsLess<true>(exec, JSValue::decode(encodedOp1), JSValue::decode(encodedOp2));
    403403}
    404404
    405 bool operationCompareLessEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)
     405RegisterSizedBoolean operationCompareLessEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)
    406406{
    407407    return jsLessEq<true>(exec, JSValue::decode(encodedOp1), JSValue::decode(encodedOp2));
    408408}
    409409
    410 bool operationCompareGreater(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)
     410RegisterSizedBoolean operationCompareGreater(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)
    411411{
    412412    return jsLess<false>(exec, JSValue::decode(encodedOp2), JSValue::decode(encodedOp1));
    413413}
    414414
    415 bool operationCompareGreaterEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)
     415RegisterSizedBoolean operationCompareGreaterEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)
    416416{
    417417    return jsLessEq<false>(exec, JSValue::decode(encodedOp2), JSValue::decode(encodedOp1));
    418418}
    419419
    420 bool operationCompareEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)
     420RegisterSizedBoolean operationCompareEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)
    421421{
    422422    return JSValue::equalSlowCaseInline(exec, JSValue::decode(encodedOp1), JSValue::decode(encodedOp2));
    423423}
    424424
    425 bool operationCompareStrictEqCell(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)
     425RegisterSizedBoolean operationCompareStrictEqCell(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)
    426426{
    427427    JSValue op1 = JSValue::decode(encodedOp1);
     
    434434}
    435435
    436 bool operationCompareStrictEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)
     436RegisterSizedBoolean operationCompareStrictEq(ExecState* exec, EncodedJSValue encodedOp1, EncodedJSValue encodedOp2)
    437437{
    438438    return JSValue::strictEqual(exec, JSValue::decode(encodedOp1), JSValue::decode(encodedOp2));
     
    685685}
    686686
    687 bool dfgConvertJSValueToBoolean(ExecState* exec, EncodedJSValue encodedOp)
     687RegisterSizedBoolean dfgConvertJSValueToBoolean(ExecState* exec, EncodedJSValue encodedOp)
    688688{
    689689    return JSValue::decode(encodedOp).toBoolean(exec);
Note: See TracChangeset for help on using the changeset viewer.