| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 // Sets the remembered set bit for [address+offset], where address is the | 91 // Sets the remembered set bit for [address+offset], where address is the |
| 92 // address of the heap object 'object'. The address must be in the first 8K | 92 // address of the heap object 'object'. The address must be in the first 8K |
| 93 // of an allocated page. The 'scratch' register is used in the | 93 // of an allocated page. The 'scratch' register is used in the |
| 94 // implementation and all 3 registers are clobbered by the operation, as | 94 // implementation and all 3 registers are clobbered by the operation, as |
| 95 // well as the ip register. | 95 // well as the ip register. |
| 96 void RecordWrite(Register object, Register offset, Register scratch); | 96 void RecordWrite(Register object, Register offset, Register scratch); |
| 97 | 97 |
| 98 // --------------------------------------------------------------------------- | 98 // --------------------------------------------------------------------------- |
| 99 // Activation frames | 99 // Activation frames |
| 100 | 100 |
| 101 void EnterJSFrame(int argc); | 101 void EnterInternalFrame(); |
| 102 void ExitJSFrame(ExitJSFlag flag); | 102 void ExitInternalFrame(); |
| 103 | 103 |
| 104 | 104 |
| 105 // --------------------------------------------------------------------------- | 105 // --------------------------------------------------------------------------- |
| 106 // JavaScript invokes | 106 // JavaScript invokes |
| 107 | 107 |
| 108 // Helper functions for generating invokes. | |
| 109 void InvokePrologue(const ParameterCount& expected, | |
| 110 const ParameterCount& actual, | |
| 111 Handle<Code> code_constant, | |
| 112 Register code_reg, | |
| 113 Label* done, | |
| 114 InvokeFlag flag); | |
| 115 | |
| 116 // Invoke the JavaScript function code by either calling or jumping. | 108 // Invoke the JavaScript function code by either calling or jumping. |
| 117 void InvokeCode(Register code, | 109 void InvokeCode(Register code, |
| 118 const ParameterCount& expected, | 110 const ParameterCount& expected, |
| 119 const ParameterCount& actual, | 111 const ParameterCount& actual, |
| 120 InvokeFlag flag); | 112 InvokeFlag flag); |
| 121 | 113 |
| 122 void InvokeCode(Handle<Code> code, | 114 void InvokeCode(Handle<Code> code, |
| 123 const ParameterCount& expected, | 115 const ParameterCount& expected, |
| 124 const ParameterCount& actual, | 116 const ParameterCount& actual, |
| 125 RelocMode rmode, | 117 RelocMode rmode, |
| 126 InvokeFlag flag); | 118 InvokeFlag flag); |
| 127 | 119 |
| 128 // Invoke the JavaScript function in the given register. Changes the | 120 // Invoke the JavaScript function in the given register. Changes the |
| 129 // current context to the context in the function before invoking. | 121 // current context to the context in the function before invoking. |
| 130 void InvokeFunction(Register function, | 122 void InvokeFunction(Register function, |
| 131 const ParameterCount& actual, | 123 const ParameterCount& actual, |
| 132 InvokeFlag flag); | 124 InvokeFlag flag); |
| 133 | 125 |
| 126 |
| 134 // --------------------------------------------------------------------------- | 127 // --------------------------------------------------------------------------- |
| 135 // Debugger Support | 128 // Debugger Support |
| 136 | 129 |
| 137 void SaveRegistersToMemory(RegList regs); | 130 void SaveRegistersToMemory(RegList regs); |
| 138 void RestoreRegistersFromMemory(RegList regs); | 131 void RestoreRegistersFromMemory(RegList regs); |
| 139 void CopyRegistersFromMemoryToStack(Register base, RegList regs); | 132 void CopyRegistersFromMemoryToStack(Register base, RegList regs); |
| 140 void CopyRegistersFromStackToMemory(Register base, | 133 void CopyRegistersFromStackToMemory(Register base, |
| 141 Register scratch, | 134 Register scratch, |
| 142 RegList regs); | 135 RegList regs); |
| 143 | 136 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 // Tail call of a runtime routine (jump). | 186 // Tail call of a runtime routine (jump). |
| 194 // Like JumpToBuiltin, but also takes care of passing the number | 187 // Like JumpToBuiltin, but also takes care of passing the number |
| 195 // of parameters. | 188 // of parameters. |
| 196 void TailCallRuntime(const ExternalReference& ext, int num_arguments); | 189 void TailCallRuntime(const ExternalReference& ext, int num_arguments); |
| 197 | 190 |
| 198 // Jump to the builtin routine. | 191 // Jump to the builtin routine. |
| 199 void JumpToBuiltin(const ExternalReference& builtin); | 192 void JumpToBuiltin(const ExternalReference& builtin); |
| 200 | 193 |
| 201 // Invoke specified builtin JavaScript function. Adds an entry to | 194 // Invoke specified builtin JavaScript function. Adds an entry to |
| 202 // the unresolved list if the name does not resolve. | 195 // the unresolved list if the name does not resolve. |
| 203 void InvokeBuiltin(const char* name, int argc, InvokeJSFlags flags); | 196 void InvokeBuiltin(Builtins::JavaScript id, InvokeJSFlags flags); |
| 197 |
| 198 // Store the code object for the given builtin in the target register and |
| 199 // setup the function in r1. |
| 200 void GetBuiltinEntry(Register target, Builtins::JavaScript id); |
| 204 | 201 |
| 205 struct Unresolved { | 202 struct Unresolved { |
| 206 int pc; | 203 int pc; |
| 207 uint32_t flags; // see Bootstrapper::FixupFlags decoders/encoders. | 204 uint32_t flags; // see Bootstrapper::FixupFlags decoders/encoders. |
| 208 const char* name; | 205 const char* name; |
| 209 }; | 206 }; |
| 210 List<Unresolved>* unresolved() { return &unresolved_; } | 207 List<Unresolved>* unresolved() { return &unresolved_; } |
| 211 | 208 |
| 212 | 209 |
| 213 // --------------------------------------------------------------------------- | 210 // --------------------------------------------------------------------------- |
| (...skipping 12 matching lines...) Expand all Loading... |
| 226 // Verify restrictions about code generated in stubs. | 223 // Verify restrictions about code generated in stubs. |
| 227 void set_generating_stub(bool value) { generating_stub_ = value; } | 224 void set_generating_stub(bool value) { generating_stub_ = value; } |
| 228 bool generating_stub() { return generating_stub_; } | 225 bool generating_stub() { return generating_stub_; } |
| 229 void set_allow_stub_calls(bool value) { allow_stub_calls_ = value; } | 226 void set_allow_stub_calls(bool value) { allow_stub_calls_ = value; } |
| 230 bool allow_stub_calls() { return allow_stub_calls_; } | 227 bool allow_stub_calls() { return allow_stub_calls_; } |
| 231 | 228 |
| 232 private: | 229 private: |
| 233 List<Unresolved> unresolved_; | 230 List<Unresolved> unresolved_; |
| 234 bool generating_stub_; | 231 bool generating_stub_; |
| 235 bool allow_stub_calls_; | 232 bool allow_stub_calls_; |
| 233 |
| 234 // Helper functions for generating invokes. |
| 235 void InvokePrologue(const ParameterCount& expected, |
| 236 const ParameterCount& actual, |
| 237 Handle<Code> code_constant, |
| 238 Register code_reg, |
| 239 Label* done, |
| 240 InvokeFlag flag); |
| 241 |
| 242 // Get the code for the given builtin. Returns if able to resolve |
| 243 // the function in the 'resolved' flag. |
| 244 Handle<Code> ResolveBuiltin(Builtins::JavaScript id, bool* resolved); |
| 236 }; | 245 }; |
| 237 | 246 |
| 238 | 247 |
| 239 // ----------------------------------------------------------------------------- | 248 // ----------------------------------------------------------------------------- |
| 240 // Static helper functions. | 249 // Static helper functions. |
| 241 | 250 |
| 242 // Generate a MemOperand for loading a field from an object. | 251 // Generate a MemOperand for loading a field from an object. |
| 243 static inline MemOperand FieldMemOperand(Register object, int offset) { | 252 static inline MemOperand FieldMemOperand(Register object, int offset) { |
| 244 return MemOperand(object, offset - kHeapObjectTag); | 253 return MemOperand(object, offset - kHeapObjectTag); |
| 245 } | 254 } |
| 246 | 255 |
| 247 | 256 |
| 248 | 257 |
| 249 } } // namespace v8::internal | 258 } } // namespace v8::internal |
| 250 | 259 |
| 251 #endif // V8_MACRO_ASSEMBLER_ARM_H_ | 260 #endif // V8_MACRO_ASSEMBLER_ARM_H_ |
| OLD | NEW |