Create a super rough prototype of B3
[WebKit-https.git] / Source / JavaScriptCore / b3 / B3ConstDoubleValue.h
1 /*
2  * Copyright (C) 2015 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef B3ConstDoubleValue_h
27 #define B3ConstDoubleValue_h
28
29 #if ENABLE(B3_JIT)
30
31 #include "B3Value.h"
32
33 namespace JSC { namespace B3 {
34
35 class ConstDoubleValue : public Value {
36 public:
37     static bool accepts(Opcode opcode) { return opcode == ConstDouble; }
38     
39     ~ConstDoubleValue();
40     
41     double value() const { return m_value; }
42
43     Value* negConstant(Procedure& proc) const override;
44     Value* addConstant(Procedure& proc, int32_t other) const override;
45     Value* addConstant(Procedure& proc, Value* other) const override;
46     Value* subConstant(Procedure& proc, Value* other) const override;
47
48 protected:
49     void dumpMeta(PrintStream&) const override;
50
51 private:
52     friend class Procedure;
53
54     ConstDoubleValue(unsigned index, Origin origin, double value)
55         : Value(index, ConstDouble, Double, origin)
56         , m_value(value)
57     {
58     }
59     
60     double m_value;
61 };
62
63 } } // namespace JSC::B3
64
65 #endif // ENABLE(B3_JIT)
66
67 #endif // B3ConstDoubleValue_h
68