Skip to content
Snippets Groups Projects
Select Git revision
  • 98972f8c39a1c6a3e9d1799261f9d2215f6e7055
  • wk2/unstable default
  • fix-raspi-issues-v2-oracular
  • fix-raspi-issues-v2-noble
  • fix-raspi-issues-v2
  • fix-raspi-issues
  • wpe/unstable
  • wpewebkit-2.44
  • berto/wk2/bookworm
  • berto/wk2/bullseye
  • webkitgtk-2.44
  • wk2/experimental
  • wpewebkit-2.42
  • webkitgtk-2.42
  • webkitgtk-2.40
  • wpewebkit-2.40
  • buster
  • webkitgtk-2.38
  • wpewebkit-2.38
  • wpewebkit-2.36
  • webkitgtk-2.36
  • wpe/debian/2.44.1-1
  • wpe/upstream/2.44.1
  • debian/2.44.1-1
  • upstream/2.44.1
  • debian/2.44.0-2
  • debian/2.44.0-1
  • upstream/2.44.0
  • debian/2.43.4-2
  • debian/2.42.5-2
  • wpe/debian/2.42.5-1.2
  • wpe/debian/2.42.5-2_exp
  • wpe/debian/2.42.5-1.1
  • debian/2.42.5-1_deb11u1
  • debian/2.42.5-1_deb12u1
  • wpe/debian/2.42.5-1
  • wpe/upstream/2.42.5
  • debian/2.42.5-1
  • upstream/2.42.5
  • debian/2.43.4-1
  • upstream/2.43.4
41 results

SnippetOperand.h

  • Forked from WebKit / webkit
    Source project has a limited visibility.
    SnippetOperand.h 3.26 KiB
    /*
     * Copyright (C) 2015 Apple Inc. All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     * 1. Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     * 2. Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
     * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    #pragma once
    
    #if ENABLE(JIT)
    
    #include "ResultType.h"
    #include <wtf/Packed.h>
    
    namespace JSC {
    
    class SnippetOperand {
        enum ConstOrVarType : uint8_t {
            Variable,
            ConstInt32,
            ConstDouble
        };
    
    public:
        SnippetOperand()
            : m_resultType(ResultType::unknownType())
        { }
    
        SnippetOperand(ResultType resultType)
            : m_resultType(resultType)
        { }
    
        bool mightBeNumber() const { return m_resultType.mightBeNumber(); }
        bool definitelyIsNumber() const { return m_resultType.definitelyIsNumber(); }
    
        bool definitelyIsBoolean() const { return m_resultType.definitelyIsBoolean(); }
    
        bool isConst() const { return m_type != Variable; }
        bool isConstInt32() const { return m_type == ConstInt32; }
        bool isConstDouble() const { return m_type == ConstDouble; }
        bool isPositiveConstInt32() const { return isConstInt32() && asConstInt32() > 0; }
    
        int64_t asRawBits() const { return m_val.get().rawBits; }
    
        int32_t asConstInt32() const
        {
            ASSERT(m_type == ConstInt32);
            return m_val.get().int32Val;
        }
    
        double asConstDouble() const
        {
            ASSERT(m_type == ConstDouble);
            return m_val.get().doubleVal;
        }
    
        double asConstNumber() const
        {
            if (isConstInt32())
                return asConstInt32();
            ASSERT(isConstDouble());
            return asConstDouble();
        }
    
        void setConstInt32(int32_t value)
        {
            m_type = ConstInt32;
            UnionType u;
            u.int32Val = value;
            m_val = WTFMove(u);
        }
    
        void setConstDouble(double value)
        {
            m_type = ConstDouble;
            UnionType u;
            u.doubleVal = value;
            m_val = WTFMove(u);
        }
    
    private:
        ResultType m_resultType;
        ConstOrVarType m_type { Variable };
        union UnionType {
            int32_t int32Val;
            double doubleVal;
            int64_t rawBits;
        };
        Packed<UnionType> m_val;
    };
    static_assert(alignof(SnippetOperand) == 1);
    
    } // namespace JSC
    
    #endif // ENABLE(JIT)