diff options
Diffstat (limited to 'deps/v8/src/ia32/macro-assembler-ia32.h')
-rw-r--r-- | deps/v8/src/ia32/macro-assembler-ia32.h | 57 |
1 files changed, 34 insertions, 23 deletions
diff --git a/deps/v8/src/ia32/macro-assembler-ia32.h b/deps/v8/src/ia32/macro-assembler-ia32.h index cc245602d..69dc54ca8 100644 --- a/deps/v8/src/ia32/macro-assembler-ia32.h +++ b/deps/v8/src/ia32/macro-assembler-ia32.h @@ -69,6 +69,7 @@ class MacroAssembler: public Assembler { void CopyRegistersFromStackToMemory(Register base, Register scratch, RegList regs); + void DebugBreak(); #endif // --------------------------------------------------------------------------- @@ -123,6 +124,10 @@ class MacroAssembler: public Assembler { const ParameterCount& actual, InvokeFlag flag); + void InvokeFunction(JSFunction* function, + const ParameterCount& actual, + InvokeFlag flag); + // Invoke specified builtin JavaScript function. Adds an entry to // the unresolved list if the name does not resolve. void InvokeBuiltin(Builtins::JavaScript id, InvokeFlag flag); @@ -141,6 +146,14 @@ class MacroAssembler: public Assembler { // Compare instance type for map. void CmpInstanceType(Register map, InstanceType type); + // Check if the map of an object is equal to a specified map and + // branch to label if not. Skip the smi check if not required + // (object is known to be a heap object) + void CheckMap(Register obj, + Handle<Map> map, + Label* fail, + bool is_heap_object); + // Check if the object in register heap_object is a string. Afterwards the // register map contains the object map and the register instance_type // contains the instance_type. The registers map and instance_type can be the @@ -163,6 +176,9 @@ class MacroAssembler: public Assembler { sar(reg, kSmiTagSize); } + // Abort execution if argument is not a number. Used in debug code. + void AbortIfNotNumber(Register object, const char* msg); + // --------------------------------------------------------------------------- // Exception handling @@ -185,9 +201,14 @@ class MacroAssembler: public Assembler { // clobbered if it the same as the holder register. The function // returns a register containing the holder - either object_reg or // holder_reg. + // The function can optionally (when save_at_depth != + // kInvalidProtoDepth) save the object at the given depth by moving + // it to [esp + kPointerSize]. Register CheckMaps(JSObject* object, Register object_reg, JSObject* holder, Register holder_reg, - Register scratch, Label* miss); + Register scratch, + int save_at_depth, + Label* miss); // Generate code for checking access rights - used for security checks // on access to global objects across environments. The holder register @@ -339,6 +360,9 @@ class MacroAssembler: public Assembler { // Convenience function: Same as above, but takes the fid instead. void CallRuntime(Runtime::FunctionId id, int num_arguments); + // Convenience function: call an external reference. + void CallExternalReference(ExternalReference ref, int num_arguments); + // Convenience function: Same as above, but takes the fid instead. Object* TryCallRuntime(Runtime::FunctionId id, int num_arguments); @@ -376,13 +400,6 @@ class MacroAssembler: public Assembler { void Move(Register target, Handle<Object> value); - struct Unresolved { - int pc; - uint32_t flags; // see Bootstrapper::FixupFlags decoders/encoders. - const char* name; - }; - List<Unresolved>* unresolved() { return &unresolved_; } - Handle<Object> CodeObject() { return code_object_; } @@ -418,6 +435,13 @@ class MacroAssembler: public Assembler { // --------------------------------------------------------------------------- // String utilities. + // Check whether the instance type represents a flat ascii string. Jump to the + // label if not. If the instance type can be scratched specify same register + // for both instance type and scratch. + void JumpIfInstanceTypeIsNotSequentialAscii(Register instance_type, + Register scratch, + Label *on_not_flat_ascii_string); + // Checks if both objects are sequential ASCII strings, and jumps to label // if either is not. void JumpIfNotBothSequentialAsciiStrings(Register object1, @@ -427,11 +451,10 @@ class MacroAssembler: public Assembler { Label *on_not_flat_ascii_strings); private: - List<Unresolved> unresolved_; bool generating_stub_; bool allow_stub_calls_; - Handle<Object> code_object_; // This handle will be patched with the - // code object on installation. + // This handle will be patched with the code object on installation. + Handle<Object> code_object_; // Helper functions for generating invokes. void InvokePrologue(const ParameterCount& expected, @@ -441,18 +464,6 @@ class MacroAssembler: public Assembler { Label* done, InvokeFlag flag); - // Prepares for a call or jump to a builtin by doing two things: - // 1. Emits code that fetches the builtin's function object from the context - // at runtime, and puts it in the register rdi. - // 2. Fetches the builtin's code object, and returns it in a handle, at - // compile time, so that later code can emit instructions to jump or call - // the builtin directly. If the code object has not yet been created, it - // returns the builtin code object for IllegalFunction, and sets the - // output parameter "resolved" to false. Code that uses the return value - // should then add the address and the builtin name to the list of fixups - // called unresolved_, which is fixed up by the bootstrapper. - Handle<Code> ResolveBuiltin(Builtins::JavaScript id, bool* resolved); - // Activation support. void EnterFrame(StackFrame::Type type); void LeaveFrame(StackFrame::Type type); |