Index: src/ia32/codegen-ia32.h |
=================================================================== |
--- src/ia32/codegen-ia32.h (revision 2620) |
+++ src/ia32/codegen-ia32.h (working copy) |
@@ -609,6 +609,57 @@ |
}; |
+// Flag that indicates whether or not the code that handles smi arguments |
+// should be placed in the stub, inlined, or omitted entirely. |
+enum GenericBinaryFlags { |
+ SMI_CODE_IN_STUB, |
+ SMI_CODE_INLINED |
+}; |
+ |
+ |
+class GenericBinaryOpStub: public CodeStub { |
+ public: |
+ GenericBinaryOpStub(Token::Value op, |
+ OverwriteMode mode, |
+ GenericBinaryFlags flags) |
+ : op_(op), mode_(mode), flags_(flags) { |
+ ASSERT(OpBits::is_valid(Token::NUM_TOKENS)); |
+ } |
+ |
+ void GenerateSmiCode(MacroAssembler* masm, Label* slow); |
+ |
+ private: |
+ Token::Value op_; |
+ OverwriteMode mode_; |
+ GenericBinaryFlags flags_; |
+ |
+ const char* GetName(); |
+ |
+#ifdef DEBUG |
+ void Print() { |
+ PrintF("GenericBinaryOpStub (op %s), (mode %d, flags %d)\n", |
+ Token::String(op_), |
+ static_cast<int>(mode_), |
+ static_cast<int>(flags_)); |
+ } |
+#endif |
+ |
+ // Minor key encoding in 16 bits FOOOOOOOOOOOOOMM. |
+ class ModeBits: public BitField<OverwriteMode, 0, 2> {}; |
+ class OpBits: public BitField<Token::Value, 2, 13> {}; |
+ class FlagBits: public BitField<GenericBinaryFlags, 15, 1> {}; |
+ |
+ Major MajorKey() { return GenericBinaryOp; } |
+ int MinorKey() { |
+ // Encode the parameters in a unique 16 bit value. |
+ return OpBits::encode(op_) |
+ | ModeBits::encode(mode_) |
+ | FlagBits::encode(flags_); |
+ } |
+ void Generate(MacroAssembler* masm); |
+}; |
+ |
+ |
} } // namespace v8::internal |
#endif // V8_IA32_CODEGEN_IA32_H_ |