Changeset 41126 in webkit for trunk/JavaScriptCore/interpreter/Interpreter.h
- Timestamp:
- Feb 22, 2009, 3:26:07 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/interpreter/Interpreter.h
r41100 r41126 54 54 struct HandlerInfo; 55 55 56 #if ENABLE(JIT)57 58 #if USE(JIT_STUB_ARGUMENT_VA_LIST)59 #define STUB_ARGS void* args, ...60 #define ARGS (reinterpret_cast<void**>(vl_args) - 1)61 #else // JIT_STUB_ARGUMENT_REGISTER or JIT_STUB_ARGUMENT_STACK62 #define STUB_ARGS void** args63 #define ARGS (args)64 #endif65 66 #if USE(JIT_STUB_ARGUMENT_REGISTER)67 #if PLATFORM(X86_64)68 #define JIT_STUB69 #elif COMPILER(MSVC)70 #define JIT_STUB __fastcall71 #elif COMPILER(GCC)72 #define JIT_STUB __attribute__ ((fastcall))73 #else74 #error Need to support register calling convention in this compiler75 #endif76 #else // JIT_STUB_ARGUMENT_VA_LIST or JIT_STUB_ARGUMENT_STACK77 #if COMPILER(MSVC)78 #define JIT_STUB __cdecl79 #else80 #define JIT_STUB81 #endif82 #endif83 84 // The Mac compilers are fine with this,85 #if PLATFORM(MAC)86 struct VoidPtrPair {87 void* first;88 void* second;89 };90 #define RETURN_PAIR(a,b) VoidPtrPair pair = { a, b }; return pair91 #else92 typedef uint64_t VoidPtrPair;93 union VoidPtrPairValue {94 struct { void* first; void* second; } s;95 VoidPtrPair i;96 };97 #define RETURN_PAIR(a,b) VoidPtrPairValue pair = {{ a, b }}; return pair.i98 #endif99 100 #endif // ENABLE(JIT)101 102 56 enum DebugHookID { 103 57 WillExecuteProgram, … … 113 67 class Interpreter { 114 68 friend class JIT; 69 friend class JITStubs; 115 70 public: 116 71 Interpreter(); … … 151 106 152 107 void getArgumentsData(CallFrame*, JSFunction*&, ptrdiff_t& firstParameterIndex, Register*& argv, int& argc); 153 void setTimeoutTime(unsigned timeoutTime) { m_timeoutTime = timeoutTime; }154 108 155 void startTimeoutCheck()156 {157 if (!m_timeoutCheckCount)158 resetTimeoutCheck();159 160 ++m_timeoutCheckCount;161 }162 163 void stopTimeoutCheck()164 {165 ASSERT(m_timeoutCheckCount);166 --m_timeoutCheckCount;167 }168 169 inline void initTimeout()170 {171 ASSERT(!m_timeoutCheckCount);172 resetTimeoutCheck();173 m_timeoutTime = 0;174 m_timeoutCheckCount = 0;175 }176 177 109 void setSampler(SamplingTool* sampler) { m_sampler = sampler; } 178 110 SamplingTool* sampler() { return m_sampler; } 179 180 #if ENABLE(JIT)181 182 static int JIT_STUB cti_timeout_check(STUB_ARGS);183 static void JIT_STUB cti_register_file_check(STUB_ARGS);184 185 static JSObject* JIT_STUB cti_op_convert_this(STUB_ARGS);186 static void JIT_STUB cti_op_end(STUB_ARGS);187 static JSValueEncodedAsPointer* JIT_STUB cti_op_add(STUB_ARGS);188 static JSValueEncodedAsPointer* JIT_STUB cti_op_pre_inc(STUB_ARGS);189 static int JIT_STUB cti_op_loop_if_less(STUB_ARGS);190 static int JIT_STUB cti_op_loop_if_lesseq(STUB_ARGS);191 static JSObject* JIT_STUB cti_op_new_object(STUB_ARGS);192 static void JIT_STUB cti_op_put_by_id(STUB_ARGS);193 static void JIT_STUB cti_op_put_by_id_second(STUB_ARGS);194 static void JIT_STUB cti_op_put_by_id_generic(STUB_ARGS);195 static void JIT_STUB cti_op_put_by_id_fail(STUB_ARGS);196 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id(STUB_ARGS);197 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_second(STUB_ARGS);198 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_generic(STUB_ARGS);199 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_self_fail(STUB_ARGS);200 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_proto_list(STUB_ARGS);201 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_proto_list_full(STUB_ARGS);202 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_proto_fail(STUB_ARGS);203 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_array_fail(STUB_ARGS);204 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_string_fail(STUB_ARGS);205 static JSValueEncodedAsPointer* JIT_STUB cti_op_del_by_id(STUB_ARGS);206 static JSValueEncodedAsPointer* JIT_STUB cti_op_instanceof(STUB_ARGS);207 static JSValueEncodedAsPointer* JIT_STUB cti_op_mul(STUB_ARGS);208 static JSObject* JIT_STUB cti_op_new_func(STUB_ARGS);209 static void* JIT_STUB cti_op_call_JSFunction(STUB_ARGS);210 static VoidPtrPair JIT_STUB cti_op_call_arityCheck(STUB_ARGS);211 static JSValueEncodedAsPointer* JIT_STUB cti_op_call_NotJSFunction(STUB_ARGS);212 static void JIT_STUB cti_op_create_arguments(STUB_ARGS);213 static void JIT_STUB cti_op_create_arguments_no_params(STUB_ARGS);214 static void JIT_STUB cti_op_tear_off_activation(STUB_ARGS);215 static void JIT_STUB cti_op_tear_off_arguments(STUB_ARGS);216 static void JIT_STUB cti_op_profile_will_call(STUB_ARGS);217 static void JIT_STUB cti_op_profile_did_call(STUB_ARGS);218 static void JIT_STUB cti_op_ret_scopeChain(STUB_ARGS);219 static JSObject* JIT_STUB cti_op_new_array(STUB_ARGS);220 static JSValueEncodedAsPointer* JIT_STUB cti_op_resolve(STUB_ARGS);221 static JSValueEncodedAsPointer* JIT_STUB cti_op_resolve_global(STUB_ARGS);222 static JSObject* JIT_STUB cti_op_construct_JSConstruct(STUB_ARGS);223 static JSValueEncodedAsPointer* JIT_STUB cti_op_construct_NotJSConstruct(STUB_ARGS);224 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_val(STUB_ARGS);225 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_val_byte_array(STUB_ARGS);226 static VoidPtrPair JIT_STUB cti_op_resolve_func(STUB_ARGS);227 static JSValueEncodedAsPointer* JIT_STUB cti_op_sub(STUB_ARGS);228 static void JIT_STUB cti_op_put_by_val(STUB_ARGS);229 static void JIT_STUB cti_op_put_by_val_array(STUB_ARGS);230 static void JIT_STUB cti_op_put_by_val_byte_array(STUB_ARGS);231 static JSValueEncodedAsPointer* JIT_STUB cti_op_lesseq(STUB_ARGS);232 static int JIT_STUB cti_op_loop_if_true(STUB_ARGS);233 static JSValueEncodedAsPointer* JIT_STUB cti_op_resolve_base(STUB_ARGS);234 static JSValueEncodedAsPointer* JIT_STUB cti_op_negate(STUB_ARGS);235 static JSValueEncodedAsPointer* JIT_STUB cti_op_resolve_skip(STUB_ARGS);236 static JSValueEncodedAsPointer* JIT_STUB cti_op_div(STUB_ARGS);237 static JSValueEncodedAsPointer* JIT_STUB cti_op_pre_dec(STUB_ARGS);238 static int JIT_STUB cti_op_jless(STUB_ARGS);239 static JSValueEncodedAsPointer* JIT_STUB cti_op_not(STUB_ARGS);240 static int JIT_STUB cti_op_jtrue(STUB_ARGS);241 static VoidPtrPair JIT_STUB cti_op_post_inc(STUB_ARGS);242 static JSValueEncodedAsPointer* JIT_STUB cti_op_eq(STUB_ARGS);243 static JSValueEncodedAsPointer* JIT_STUB cti_op_lshift(STUB_ARGS);244 static JSValueEncodedAsPointer* JIT_STUB cti_op_bitand(STUB_ARGS);245 static JSValueEncodedAsPointer* JIT_STUB cti_op_rshift(STUB_ARGS);246 static JSValueEncodedAsPointer* JIT_STUB cti_op_bitnot(STUB_ARGS);247 static VoidPtrPair JIT_STUB cti_op_resolve_with_base(STUB_ARGS);248 static JSObject* JIT_STUB cti_op_new_func_exp(STUB_ARGS);249 static JSValueEncodedAsPointer* JIT_STUB cti_op_mod(STUB_ARGS);250 static JSValueEncodedAsPointer* JIT_STUB cti_op_less(STUB_ARGS);251 static JSValueEncodedAsPointer* JIT_STUB cti_op_neq(STUB_ARGS);252 static VoidPtrPair JIT_STUB cti_op_post_dec(STUB_ARGS);253 static JSValueEncodedAsPointer* JIT_STUB cti_op_urshift(STUB_ARGS);254 static JSValueEncodedAsPointer* JIT_STUB cti_op_bitxor(STUB_ARGS);255 static JSObject* JIT_STUB cti_op_new_regexp(STUB_ARGS);256 static JSValueEncodedAsPointer* JIT_STUB cti_op_bitor(STUB_ARGS);257 static JSValueEncodedAsPointer* JIT_STUB cti_op_call_eval(STUB_ARGS);258 static JSValueEncodedAsPointer* JIT_STUB cti_op_throw(STUB_ARGS);259 static JSPropertyNameIterator* JIT_STUB cti_op_get_pnames(STUB_ARGS);260 static JSValueEncodedAsPointer* JIT_STUB cti_op_next_pname(STUB_ARGS);261 static JSObject* JIT_STUB cti_op_push_scope(STUB_ARGS);262 static void JIT_STUB cti_op_pop_scope(STUB_ARGS);263 static JSValueEncodedAsPointer* JIT_STUB cti_op_typeof(STUB_ARGS);264 static JSValueEncodedAsPointer* JIT_STUB cti_op_is_undefined(STUB_ARGS);265 static JSValueEncodedAsPointer* JIT_STUB cti_op_is_boolean(STUB_ARGS);266 static JSValueEncodedAsPointer* JIT_STUB cti_op_is_number(STUB_ARGS);267 static JSValueEncodedAsPointer* JIT_STUB cti_op_is_string(STUB_ARGS);268 static JSValueEncodedAsPointer* JIT_STUB cti_op_is_object(STUB_ARGS);269 static JSValueEncodedAsPointer* JIT_STUB cti_op_is_function(STUB_ARGS);270 static JSValueEncodedAsPointer* JIT_STUB cti_op_stricteq(STUB_ARGS);271 static JSValueEncodedAsPointer* JIT_STUB cti_op_nstricteq(STUB_ARGS);272 static JSValueEncodedAsPointer* JIT_STUB cti_op_to_jsnumber(STUB_ARGS);273 static JSValueEncodedAsPointer* JIT_STUB cti_op_in(STUB_ARGS);274 static JSObject* JIT_STUB cti_op_push_new_scope(STUB_ARGS);275 static void JIT_STUB cti_op_jmp_scopes(STUB_ARGS);276 static void JIT_STUB cti_op_put_by_index(STUB_ARGS);277 static void* JIT_STUB cti_op_switch_imm(STUB_ARGS);278 static void* JIT_STUB cti_op_switch_char(STUB_ARGS);279 static void* JIT_STUB cti_op_switch_string(STUB_ARGS);280 static JSValueEncodedAsPointer* JIT_STUB cti_op_del_by_val(STUB_ARGS);281 static void JIT_STUB cti_op_put_getter(STUB_ARGS);282 static void JIT_STUB cti_op_put_setter(STUB_ARGS);283 static JSObject* JIT_STUB cti_op_new_error(STUB_ARGS);284 static void JIT_STUB cti_op_debug(STUB_ARGS);285 286 static JSValueEncodedAsPointer* JIT_STUB cti_vm_throw(STUB_ARGS);287 static void* JIT_STUB cti_vm_dontLazyLinkCall(STUB_ARGS);288 static void* JIT_STUB cti_vm_lazyLinkCall(STUB_ARGS);289 static JSObject* JIT_STUB cti_op_push_activation(STUB_ARGS);290 291 #endif // ENABLE(JIT)292 293 // Default number of ticks before a timeout check should be done.294 static const int initialTickCountThreshold = 1024;295 111 296 112 bool isJSArray(JSValuePtr v) { return v.isCell() && v.asCell()->vptr() == m_jsArrayVptr; } … … 326 142 void dumpRegisters(CallFrame*); 327 143 328 bool checkTimeout(JSGlobalObject*);329 void resetTimeoutCheck();330 331 144 void tryCacheGetByID(CallFrame*, CodeBlock*, Instruction*, JSValuePtr baseValue, const Identifier& propertyName, const PropertySlot&); 332 145 void uncacheGetByID(CodeBlock*, Instruction* vPC); … … 335 148 336 149 bool isCallBytecode(Opcode opcode) { return opcode == getOpcode(op_call) || opcode == getOpcode(op_construct) || opcode == getOpcode(op_call_eval); } 337 338 #if ENABLE(JIT)339 void tryCTICacheGetByID(CallFrame*, CodeBlock*, void* returnAddress, JSValuePtr baseValue, const Identifier& propertyName, const PropertySlot&);340 void tryCTICachePutByID(CallFrame*, CodeBlock*, void* returnAddress, JSValuePtr baseValue, const PutPropertySlot&);341 #endif342 150 343 151 SamplingTool* m_sampler; … … 353 161 354 162 int m_reentryDepth; 355 unsigned m_timeoutTime;356 unsigned m_timeAtLastCheckTimeout;357 unsigned m_timeExecuting;358 unsigned m_timeoutCheckCount;359 unsigned m_ticksUntilNextTimeoutCheck;360 163 361 164 RegisterFile m_registerFile;
Note:
See TracChangeset
for help on using the changeset viewer.