Ignore:
Timestamp:
Dec 22, 2016, 5:19:55 PM (8 years ago)
Author:
[email protected]
Message:

Add BitOr for floating points to B3
https://bugs.webkit.org/show_bug.cgi?id=166446

Reviewed by Saam Barati.

Source/JavaScriptCore:

This patch does some slight refactoring to the ARM assembler,
which groups all the vector floating point instructions together.

  • assembler/ARM64Assembler.h:

(JSC::ARM64Assembler::vand):
(JSC::ARM64Assembler::vorr):
(JSC::ARM64Assembler::vectorDataProcessingLogical):
(JSC::ARM64Assembler::vectorDataProcessing2Source): Deleted.

  • assembler/MacroAssemblerARM64.h:

(JSC::MacroAssemblerARM64::orDouble):
(JSC::MacroAssemblerARM64::orFloat):

  • assembler/MacroAssemblerX86Common.h:

(JSC::MacroAssemblerX86Common::orDouble):
(JSC::MacroAssemblerX86Common::orFloat):

  • assembler/X86Assembler.h:

(JSC::X86Assembler::orps_rr):

  • b3/B3ConstDoubleValue.cpp:

(JSC::B3::ConstDoubleValue::bitOrConstant):
(JSC::B3::ConstDoubleValue::bitXorConstant):

  • b3/B3ConstDoubleValue.h:
  • b3/B3ConstFloatValue.cpp:

(JSC::B3::ConstFloatValue::bitOrConstant):
(JSC::B3::ConstFloatValue::bitXorConstant):

  • b3/B3ConstFloatValue.h:
  • b3/B3LowerToAir.cpp:

(JSC::B3::Air::LowerToAir::lower):

  • b3/B3Validate.cpp:
  • b3/air/AirInstInlines.h:

(JSC::B3::Air::Inst::shouldTryAliasingDef):

  • b3/air/AirOpcode.opcodes:
  • b3/testb3.cpp:

(JSC::B3::bitOrDouble):
(JSC::B3::testBitOrArgDouble):
(JSC::B3::testBitOrArgsDouble):
(JSC::B3::testBitOrArgImmDouble):
(JSC::B3::testBitOrImmsDouble):
(JSC::B3::bitOrFloat):
(JSC::B3::testBitOrArgFloat):
(JSC::B3::testBitOrArgsFloat):
(JSC::B3::testBitOrArgImmFloat):
(JSC::B3::testBitOrImmsFloat):
(JSC::B3::testBitOrArgsFloatWithUselessDoubleConversion):
(JSC::B3::run):

Websites/webkit.org:

Update docs to indicate it's cool to use bit ops with floating point.

  • docs/b3/intermediate-representation.html:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/b3/B3Validate.cpp

    r209764 r210124  
    195195            case UMod:
    196196            case BitAnd:
     197            case BitOr:
    197198            case BitXor:
    198199                VALIDATE(!value->kind().traps(), ("At ", *value));
     
    219220                VALIDATE(value->type() == value->child(0)->type(), ("At ", *value));
    220221                VALIDATE(value->type() != Void, ("At ", *value));
    221                 break;
    222             case BitOr:
    223                 VALIDATE(!value->kind().hasExtraBits(), ("At ", *value));
    224                 VALIDATE(value->numChildren() == 2, ("At ", *value));
    225                 VALIDATE(value->type() == value->child(0)->type(), ("At ", *value));
    226                 VALIDATE(value->type() == value->child(1)->type(), ("At ", *value));
    227                 VALIDATE(isInt(value->type()), ("At ", *value));
    228222                break;
    229223            case Shl:
Note: See TracChangeset for help on using the changeset viewer.