Changeset 37674 in webkit for trunk/JavaScriptCore/VM/Machine.cpp


Ignore:
Timestamp:
Oct 17, 2008, 11:17:31 PM (17 years ago)
Author:
[email protected]
Message:

2008-10-17 Maciej Stachowiak <[email protected]>

Reviewed by Cameron Zwarich.


  • in debug builds, alter the stack to avoid blowing out MallocStackLogging


(In essence, while executing a CTI function we alter the return
address to jscGeneratedNativeCode so that a single consistent
function is on the stack instead of many random functions without
symbols.)

  • VM/CTI.h:
  • VM/Machine.cpp: (JSC::doSetReturnAddress): (JSC::): (JSC::StackHack::StackHack): (JSC::StackHack::~StackHack): (JSC::Machine::cti_op_convert_this): (JSC::Machine::cti_op_end): (JSC::Machine::cti_op_add): (JSC::Machine::cti_op_pre_inc): (JSC::Machine::cti_timeout_check): (JSC::Machine::cti_register_file_check): (JSC::Machine::cti_op_loop_if_less): (JSC::Machine::cti_op_loop_if_lesseq): (JSC::Machine::cti_op_new_object): (JSC::Machine::cti_op_put_by_id): (JSC::Machine::cti_op_put_by_id_second): (JSC::Machine::cti_op_put_by_id_generic): (JSC::Machine::cti_op_put_by_id_fail): (JSC::Machine::cti_op_get_by_id): (JSC::Machine::cti_op_get_by_id_second): (JSC::Machine::cti_op_get_by_id_generic): (JSC::Machine::cti_op_get_by_id_fail): (JSC::Machine::cti_op_instanceof): (JSC::Machine::cti_op_del_by_id): (JSC::Machine::cti_op_mul): (JSC::Machine::cti_op_new_func): (JSC::Machine::cti_op_call_profiler): (JSC::Machine::cti_op_call_JSFunction): (JSC::Machine::cti_vm_lazyLinkCall): (JSC::Machine::cti_vm_compile): (JSC::Machine::cti_op_push_activation): (JSC::Machine::cti_op_call_NotJSFunction): (JSC::Machine::cti_op_create_arguments): (JSC::Machine::cti_op_tear_off_activation): (JSC::Machine::cti_op_tear_off_arguments): (JSC::Machine::cti_op_ret_profiler): (JSC::Machine::cti_op_ret_scopeChain): (JSC::Machine::cti_op_new_array): (JSC::Machine::cti_op_resolve): (JSC::Machine::cti_op_construct_JSConstructFast): (JSC::Machine::cti_op_construct_JSConstruct): (JSC::Machine::cti_op_construct_NotJSConstruct): (JSC::Machine::cti_op_get_by_val): (JSC::Machine::cti_op_resolve_func): (JSC::Machine::cti_op_sub): (JSC::Machine::cti_op_put_by_val): (JSC::Machine::cti_op_put_by_val_array): (JSC::Machine::cti_op_lesseq): (JSC::Machine::cti_op_loop_if_true): (JSC::Machine::cti_op_negate): (JSC::Machine::cti_op_resolve_base): (JSC::Machine::cti_op_resolve_skip): (JSC::Machine::cti_op_resolve_global): (JSC::Machine::cti_op_div): (JSC::Machine::cti_op_pre_dec): (JSC::Machine::cti_op_jless): (JSC::Machine::cti_op_not): (JSC::Machine::cti_op_jtrue): (JSC::Machine::cti_op_post_inc): (JSC::Machine::cti_op_eq): (JSC::Machine::cti_op_lshift): (JSC::Machine::cti_op_bitand): (JSC::Machine::cti_op_rshift): (JSC::Machine::cti_op_bitnot): (JSC::Machine::cti_op_resolve_with_base): (JSC::Machine::cti_op_new_func_exp): (JSC::Machine::cti_op_mod): (JSC::Machine::cti_op_less): (JSC::Machine::cti_op_neq): (JSC::Machine::cti_op_post_dec): (JSC::Machine::cti_op_urshift): (JSC::Machine::cti_op_bitxor): (JSC::Machine::cti_op_new_regexp): (JSC::Machine::cti_op_bitor): (JSC::Machine::cti_op_call_eval): (JSC::Machine::cti_op_throw): (JSC::Machine::cti_op_get_pnames): (JSC::Machine::cti_op_next_pname): (JSC::Machine::cti_op_push_scope): (JSC::Machine::cti_op_pop_scope): (JSC::Machine::cti_op_typeof): (JSC::Machine::cti_op_is_undefined): (JSC::Machine::cti_op_is_boolean): (JSC::Machine::cti_op_is_number): (JSC::Machine::cti_op_is_string): (JSC::Machine::cti_op_is_object): (JSC::Machine::cti_op_is_function): (JSC::Machine::cti_op_stricteq): (JSC::Machine::cti_op_nstricteq): (JSC::Machine::cti_op_to_jsnumber): (JSC::Machine::cti_op_in): (JSC::Machine::cti_op_push_new_scope): (JSC::Machine::cti_op_jmp_scopes): (JSC::Machine::cti_op_put_by_index): (JSC::Machine::cti_op_switch_imm): (JSC::Machine::cti_op_switch_char): (JSC::Machine::cti_op_switch_string): (JSC::Machine::cti_op_del_by_val): (JSC::Machine::cti_op_put_getter): (JSC::Machine::cti_op_put_setter): (JSC::Machine::cti_op_new_error): (JSC::Machine::cti_op_debug): (JSC::Machine::cti_vm_throw):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/VM/Machine.cpp

    r37670 r37674  
    39833983#if ENABLE(CTI)
    39843984
    3985 NEVER_INLINE static void doSetReturnAddressVMThrowTrampoline(void** returnAddress)
    3986 {
    3987     ctiSetReturnAddress(returnAddress, reinterpret_cast<void*>(ctiVMThrowTrampoline));
    3988 }
    3989 
    39903985NEVER_INLINE void Machine::tryCTICachePutByID(CallFrame* callFrame, CodeBlock* codeBlock, void* returnAddress, JSValue* baseValue, const PutPropertySlot& slot)
    39913986{
     
    41994194    CTI::compileGetByIdChain(this, callFrame, codeBlock, structureID, chain, count, slot.cachedOffset(), returnAddress);
    42004195}
     4196
     4197
     4198NEVER_INLINE static void doSetReturnAddress(void** returnAddress, void* address)
     4199{
     4200    ctiSetReturnAddress(returnAddress, address);
     4201}
     4202
     4203#ifndef NDEBUG
     4204extern "C" {
     4205
     4206static void jscGeneratedNativeCode()
     4207{
     4208    // when executing a CTI function (which might do an allocation), we hack the return address
     4209    // to pretend to be executing this function, to keep stack logging tools from blowing out
     4210    // memory
     4211}
     4212
     4213}
     4214
     4215struct StackHack {
     4216    ALWAYS_INLINE StackHack(void** location)
     4217    {
     4218        returnAddressLocation = location;
     4219        savedReturnAddress = *returnAddressLocation;
     4220        doSetReturnAddress(returnAddressLocation, reinterpret_cast<void*>(jscGeneratedNativeCode));
     4221    }
     4222    ALWAYS_INLINE ~StackHack()
     4223    {
     4224        doSetReturnAddress(returnAddressLocation, savedReturnAddress);
     4225    }
     4226   
     4227    void** returnAddressLocation;
     4228    void* savedReturnAddress;
     4229};
     4230
     4231#define CTI_STACK_HACK() StackHack stackHack(&CTI_RETURN_ADDRESS_SLOT)
     4232#define CTI_SET_RETURN_ADDRESS(addr) stackHack.savedReturnAddress = addr
     4233#define CTI_RETURN_ADDRESS stackHack.savedReturnAddress
     4234
     4235#else
     4236
     4237#define CTI_STACK_HACK() (void)0
     4238#define CTI_SET_RETURN_ADDRESS(addr) doSetReturnAddress(&CTI_RETURN_ADDRESS_SLOT, addr);
     4239#define CTI_RETURN_ADDRESS CTI_RETURN_ADDRESS_SLOT
     4240
     4241#endif
    42014242
    42024243#define VM_THROW_EXCEPTION() \
     
    42154256        ASSERT(ARG_globalData->exception); \
    42164257        ARG_globalData->throwReturnAddress = CTI_RETURN_ADDRESS; \
    4217         doSetReturnAddressVMThrowTrampoline(&CTI_RETURN_ADDRESS); \
     4258        CTI_SET_RETURN_ADDRESS(reinterpret_cast<void*>(ctiVMThrowTrampoline)); \
    42184259    } while (0)
    42194260
     
    42514292JSValue* Machine::cti_op_convert_this(CTI_ARGS)
    42524293{
     4294    CTI_STACK_HACK();
     4295
    42534296    JSValue* v1 = ARG_src1;
    42544297    CallFrame* callFrame = ARG_callFrame;
     
    42614304void Machine::cti_op_end(CTI_ARGS)
    42624305{
     4306    CTI_STACK_HACK();
     4307
    42634308    ScopeChainNode* scopeChain = ARG_callFrame->scopeChain();
    42644309    ASSERT(scopeChain->refCount > 1);
     
    42684313JSValue* Machine::cti_op_add(CTI_ARGS)
    42694314{
     4315    CTI_STACK_HACK();
     4316
    42704317    JSValue* v1 = ARG_src1;
    42714318    JSValue* v2 = ARG_src2;
     
    43114358JSValue* Machine::cti_op_pre_inc(CTI_ARGS)
    43124359{
     4360    CTI_STACK_HACK();
     4361
    43134362    JSValue* v = ARG_src1;
    43144363
     
    43214370void Machine::cti_timeout_check(CTI_ARGS)
    43224371{
     4372    CTI_STACK_HACK();
     4373
    43234374    if (ARG_globalData->machine->checkTimeout(ARG_callFrame->dynamicGlobalObject())) {
    43244375        ARG_globalData->exception = createInterruptedExecutionException(ARG_globalData);
     
    43294380void Machine::cti_register_file_check(CTI_ARGS)
    43304381{
     4382    CTI_STACK_HACK();
     4383
    43314384    CallFrame* callFrame = ARG_callFrame;
    43324385    CodeBlock* codeBlock = callFrame->codeBlock();
     
    43394392        ASSERT(ARG_globalData->exception);
    43404393        ARG_globalData->throwReturnAddress = callFrame->returnPC();
    4341         doSetReturnAddressVMThrowTrampoline(&CTI_RETURN_ADDRESS);
     4394        CTI_SET_RETURN_ADDRESS(reinterpret_cast<void*>(ctiVMThrowTrampoline));
    43424395    }
    43434396}
     
    43454398int Machine::cti_op_loop_if_less(CTI_ARGS)
    43464399{
     4400    CTI_STACK_HACK();
     4401
    43474402    JSValue* src1 = ARG_src1;
    43484403    JSValue* src2 = ARG_src2;
     
    43564411int Machine::cti_op_loop_if_lesseq(CTI_ARGS)
    43574412{
     4413    CTI_STACK_HACK();
     4414
    43584415    JSValue* src1 = ARG_src1;
    43594416    JSValue* src2 = ARG_src2;
     
    43674424JSValue* Machine::cti_op_new_object(CTI_ARGS)
    43684425{
     4426    CTI_STACK_HACK();
     4427
    43694428    return constructEmptyObject(ARG_callFrame);;
    43704429}
     
    43724431void Machine::cti_op_put_by_id(CTI_ARGS)
    43734432{
     4433    CTI_STACK_HACK();
     4434
    43744435    CallFrame* callFrame = ARG_callFrame;
    43754436    Identifier& ident = *ARG_id2;
     
    43854446void Machine::cti_op_put_by_id_second(CTI_ARGS)
    43864447{
     4448    CTI_STACK_HACK();
     4449
    43874450    PutPropertySlot slot;
    43884451    ARG_src1->put(ARG_callFrame, *ARG_id2, ARG_src3, slot);
     
    43934456void Machine::cti_op_put_by_id_generic(CTI_ARGS)
    43944457{
     4458    CTI_STACK_HACK();
     4459
    43954460    PutPropertySlot slot;
    43964461    ARG_src1->put(ARG_callFrame, *ARG_id2, ARG_src3, slot);
     
    44004465void Machine::cti_op_put_by_id_fail(CTI_ARGS)
    44014466{
     4467    CTI_STACK_HACK();
     4468
    44024469    CallFrame* callFrame = ARG_callFrame;
    44034470    Identifier& ident = *ARG_id2;
     
    44144481JSValue* Machine::cti_op_get_by_id(CTI_ARGS)
    44154482{
     4483    CTI_STACK_HACK();
     4484
    44164485    CallFrame* callFrame = ARG_callFrame;
    44174486    Identifier& ident = *ARG_id2;
     
    44294498JSValue* Machine::cti_op_get_by_id_second(CTI_ARGS)
    44304499{
     4500    CTI_STACK_HACK();
     4501
    44314502    CallFrame* callFrame = ARG_callFrame;
    44324503    Identifier& ident = *ARG_id2;
     
    44444515JSValue* Machine::cti_op_get_by_id_generic(CTI_ARGS)
    44454516{
     4517    CTI_STACK_HACK();
     4518
    44464519    CallFrame* callFrame = ARG_callFrame;
    44474520    Identifier& ident = *ARG_id2;
     
    44574530JSValue* Machine::cti_op_get_by_id_fail(CTI_ARGS)
    44584531{
     4532    CTI_STACK_HACK();
     4533
    44594534    CallFrame* callFrame = ARG_callFrame;
    44604535    Identifier& ident = *ARG_id2;
     
    44734548JSValue* Machine::cti_op_instanceof(CTI_ARGS)
    44744549{
     4550    CTI_STACK_HACK();
     4551
    44754552    CallFrame* callFrame = ARG_callFrame;
    44764553    JSValue* value = ARG_src1;
     
    45144591JSValue* Machine::cti_op_del_by_id(CTI_ARGS)
    45154592{
     4593    CTI_STACK_HACK();
     4594
    45164595    CallFrame* callFrame = ARG_callFrame;
    45174596    Identifier& ident = *ARG_id2;
     
    45264605JSValue* Machine::cti_op_mul(CTI_ARGS)
    45274606{
     4607    CTI_STACK_HACK();
     4608
    45284609    JSValue* src1 = ARG_src1;
    45294610    JSValue* src2 = ARG_src2;
     
    45424623JSValue* Machine::cti_op_new_func(CTI_ARGS)
    45434624{
     4625    CTI_STACK_HACK();
     4626
    45444627    return ARG_func1->makeFunction(ARG_callFrame, ARG_callFrame->scopeChain());
    45454628}
     
    45474630void Machine::cti_op_call_profiler(CTI_ARGS)
    45484631{
     4632    CTI_STACK_HACK();
     4633
    45494634    ASSERT(*ARG_profilerReference);
    45504635    (*ARG_profilerReference)->willExecute(ARG_callFrame, static_cast<JSFunction*>(ARG_src1));
     
    45534638VoidPtrPair Machine::cti_op_call_JSFunction(CTI_ARGS)
    45544639{
     4640    CTI_STACK_HACK();
     4641
    45554642#ifndef NDEBUG
    45564643    CallData callData;
     
    45994686void* Machine::cti_vm_lazyLinkCall(CTI_ARGS)
    46004687{
     4688    CTI_STACK_HACK();
     4689
    46014690    Machine* machine = ARG_globalData->machine;
    46024691    CallFrame* callFrame = CallFrame::create(ARG_callFrame);
     
    46174706void* Machine::cti_vm_compile(CTI_ARGS)
    46184707{
     4708    CTI_STACK_HACK();
     4709
    46194710    CodeBlock* codeBlock = ARG_callFrame->codeBlock();
    46204711    if (!codeBlock->ctiCode)
     
    46254716JSValue* Machine::cti_op_push_activation(CTI_ARGS)
    46264717{
     4718    CTI_STACK_HACK();
     4719
    46274720    JSActivation* activation = new (ARG_globalData) JSActivation(ARG_callFrame, static_cast<FunctionBodyNode*>(ARG_callFrame->codeBlock()->ownerNode));
    46284721    ARG_callFrame->setScopeChain(ARG_callFrame->scopeChain()->copy()->push(activation));
     
    46324725JSValue* Machine::cti_op_call_NotJSFunction(CTI_ARGS)
    46334726{
     4727    CTI_STACK_HACK();
     4728
    46344729    JSValue* funcVal = ARG_src1;
    46354730
     
    46744769void Machine::cti_op_create_arguments(CTI_ARGS)
    46754770{
     4771    CTI_STACK_HACK();
     4772
    46764773    Arguments* arguments = new (ARG_globalData) Arguments(ARG_callFrame);
    46774774    ARG_callFrame->setCalleeArguments(arguments);
     
    46814778void Machine::cti_op_tear_off_activation(CTI_ARGS)
    46824779{
     4780    CTI_STACK_HACK();
     4781
    46834782    ASSERT(ARG_callFrame->codeBlock()->needsFullScopeChain);
    46844783    ASSERT(ARG_src1->isObject(&JSActivation::info));
     
    46884787void Machine::cti_op_tear_off_arguments(CTI_ARGS)
    46894788{
     4789    CTI_STACK_HACK();
     4790
    46904791    ASSERT(ARG_callFrame->codeBlock()->usesArguments && !ARG_callFrame->codeBlock()->needsFullScopeChain);
    46914792    ARG_callFrame->optionalCalleeArguments()->copyRegisters();
     
    46944795void Machine::cti_op_ret_profiler(CTI_ARGS)
    46954796{
     4797    CTI_STACK_HACK();
     4798
    46964799    ASSERT(*ARG_profilerReference);
    46974800    (*ARG_profilerReference)->didExecute(ARG_callFrame, ARG_callFrame->callee());
     
    47004803void Machine::cti_op_ret_scopeChain(CTI_ARGS)
    47014804{
     4805    CTI_STACK_HACK();
     4806
    47024807    ASSERT(ARG_callFrame->codeBlock()->needsFullScopeChain);
    47034808    ARG_callFrame->scopeChain()->deref();
     
    47064811JSValue* Machine::cti_op_new_array(CTI_ARGS)
    47074812{
     4813    CTI_STACK_HACK();
     4814
    47084815    ArgList argList(ARG_registers1, ARG_int2);
    47094816    return constructArray(ARG_callFrame, argList);
     
    47124819JSValue* Machine::cti_op_resolve(CTI_ARGS)
    47134820{
     4821    CTI_STACK_HACK();
     4822
    47144823    CallFrame* callFrame = ARG_callFrame;
    47154824    ScopeChainNode* scopeChain = callFrame->scopeChain();
     
    47394848JSValue* Machine::cti_op_construct_JSConstructFast(CTI_ARGS)
    47404849{
     4850    CTI_STACK_HACK();
     4851
    47414852#ifndef NDEBUG
    47424853    ConstructData constructData;
     
    47544865VoidPtrPair Machine::cti_op_construct_JSConstruct(CTI_ARGS)
    47554866{
     4867    CTI_STACK_HACK();
     4868
    47564869    CallFrame* callFrame = ARG_callFrame;
    47574870
     
    48144927JSValue* Machine::cti_op_construct_NotJSConstruct(CTI_ARGS)
    48154928{
     4929    CTI_STACK_HACK();
     4930
    48164931    CallFrame* callFrame = ARG_callFrame;
    48174932
     
    48504965JSValue* Machine::cti_op_get_by_val(CTI_ARGS)
    48514966{
     4967    CTI_STACK_HACK();
     4968
    48524969    CallFrame* callFrame = ARG_callFrame;
    48534970    Machine* machine = ARG_globalData->machine;
     
    48824999VoidPtrPair Machine::cti_op_resolve_func(CTI_ARGS)
    48835000{
     5001    CTI_STACK_HACK();
     5002
    48845003    CallFrame* callFrame = ARG_callFrame;
    48855004    ScopeChainNode* scopeChain = callFrame->scopeChain();
     
    49245043JSValue* Machine::cti_op_sub(CTI_ARGS)
    49255044{
     5045    CTI_STACK_HACK();
     5046
    49265047    JSValue* src1 = ARG_src1;
    49275048    JSValue* src2 = ARG_src2;
     
    49405061void Machine::cti_op_put_by_val(CTI_ARGS)
    49415062{
     5063    CTI_STACK_HACK();
     5064
    49425065    CallFrame* callFrame = ARG_callFrame;
    49435066    Machine* machine = ARG_globalData->machine;
     
    49725095void Machine::cti_op_put_by_val_array(CTI_ARGS)
    49735096{
     5097    CTI_STACK_HACK();
     5098
    49745099    CallFrame* callFrame = ARG_callFrame;
    49755100
     
    49965121JSValue* Machine::cti_op_lesseq(CTI_ARGS)
    49975122{
     5123    CTI_STACK_HACK();
     5124
    49985125    CallFrame* callFrame = ARG_callFrame;
    49995126    JSValue* result = jsBoolean(jsLessEq(callFrame, ARG_src1, ARG_src2));
     
    50045131int Machine::cti_op_loop_if_true(CTI_ARGS)
    50055132{
     5133    CTI_STACK_HACK();
     5134
    50065135    JSValue* src1 = ARG_src1;
    50075136
     
    50155144JSValue* Machine::cti_op_negate(CTI_ARGS)
    50165145{
     5146    CTI_STACK_HACK();
     5147
    50175148    JSValue* src = ARG_src1;
    50185149
     
    50295160JSValue* Machine::cti_op_resolve_base(CTI_ARGS)
    50305161{
     5162    CTI_STACK_HACK();
     5163
    50315164    return inlineResolveBase(ARG_callFrame, *ARG_id1, ARG_callFrame->scopeChain());
    50325165}
     
    50345167JSValue* Machine::cti_op_resolve_skip(CTI_ARGS)
    50355168{
     5169    CTI_STACK_HACK();
     5170
    50365171    CallFrame* callFrame = ARG_callFrame;
    50375172    ScopeChainNode* scopeChain = callFrame->scopeChain();
     
    50665201JSValue* Machine::cti_op_resolve_global(CTI_ARGS)
    50675202{
     5203    CTI_STACK_HACK();
     5204
    50685205    CallFrame* callFrame = ARG_callFrame;
    50695206    JSGlobalObject* globalObject = static_cast<JSGlobalObject*>(ARG_src1);
     
    50945231JSValue* Machine::cti_op_div(CTI_ARGS)
    50955232{
     5233    CTI_STACK_HACK();
     5234
    50965235    JSValue* src1 = ARG_src1;
    50975236    JSValue* src2 = ARG_src2;
     
    51105249JSValue* Machine::cti_op_pre_dec(CTI_ARGS)
    51115250{
     5251    CTI_STACK_HACK();
     5252
    51125253    JSValue* v = ARG_src1;
    51135254
     
    51205261int Machine::cti_op_jless(CTI_ARGS)
    51215262{
     5263    CTI_STACK_HACK();
     5264
    51225265    JSValue* src1 = ARG_src1;
    51235266    JSValue* src2 = ARG_src2;
     
    51315274JSValue* Machine::cti_op_not(CTI_ARGS)
    51325275{
     5276    CTI_STACK_HACK();
     5277
    51335278    JSValue* src = ARG_src1;
    51345279
     
    51425287int SFX_CALL Machine::cti_op_jtrue(CTI_ARGS)
    51435288{
     5289    CTI_STACK_HACK();
     5290
    51445291    JSValue* src1 = ARG_src1;
    51455292
     
    51535300VoidPtrPair Machine::cti_op_post_inc(CTI_ARGS)
    51545301{
     5302    CTI_STACK_HACK();
     5303
    51555304    JSValue* v = ARG_src1;
    51565305
     
    51665315JSValue* Machine::cti_op_eq(CTI_ARGS)
    51675316{
     5317    CTI_STACK_HACK();
     5318
    51685319    JSValue* src1 = ARG_src1;
    51695320    JSValue* src2 = ARG_src2;
     
    51795330JSValue* Machine::cti_op_lshift(CTI_ARGS)
    51805331{
     5332    CTI_STACK_HACK();
     5333
    51815334    JSValue* val = ARG_src1;
    51825335    JSValue* shift = ARG_src2;
     
    51975350JSValue* Machine::cti_op_bitand(CTI_ARGS)
    51985351{
     5352    CTI_STACK_HACK();
     5353
    51995354    JSValue* src1 = ARG_src1;
    52005355    JSValue* src2 = ARG_src2;
     
    52135368JSValue* Machine::cti_op_rshift(CTI_ARGS)
    52145369{
     5370    CTI_STACK_HACK();
     5371
    52155372    JSValue* val = ARG_src1;
    52165373    JSValue* shift = ARG_src2;
     
    52315388JSValue* Machine::cti_op_bitnot(CTI_ARGS)
    52325389{
     5390    CTI_STACK_HACK();
     5391
    52335392    JSValue* src = ARG_src1;
    52345393
     
    52455404VoidPtrPair Machine::cti_op_resolve_with_base(CTI_ARGS)
    52465405{
     5406    CTI_STACK_HACK();
     5407
    52475408    CallFrame* callFrame = ARG_callFrame;
    52485409    ScopeChainNode* scopeChain = callFrame->scopeChain();
     
    52795440JSValue* Machine::cti_op_new_func_exp(CTI_ARGS)
    52805441{
     5442    CTI_STACK_HACK();
     5443
    52815444    return ARG_funcexp1->makeFunction(ARG_callFrame, ARG_callFrame->scopeChain());
    52825445}
     
    52845447JSValue* Machine::cti_op_mod(CTI_ARGS)
    52855448{
     5449    CTI_STACK_HACK();
     5450
    52865451    JSValue* dividendValue = ARG_src1;
    52875452    JSValue* divisorValue = ARG_src2;
     
    52965461JSValue* Machine::cti_op_less(CTI_ARGS)
    52975462{
     5463    CTI_STACK_HACK();
     5464
    52985465    CallFrame* callFrame = ARG_callFrame;
    52995466    JSValue* result = jsBoolean(jsLess(callFrame, ARG_src1, ARG_src2));
     
    53045471JSValue* Machine::cti_op_neq(CTI_ARGS)
    53055472{
     5473    CTI_STACK_HACK();
     5474
    53065475    JSValue* src1 = ARG_src1;
    53075476    JSValue* src2 = ARG_src2;
     
    53175486VoidPtrPair Machine::cti_op_post_dec(CTI_ARGS)
    53185487{
     5488    CTI_STACK_HACK();
     5489
    53195490    JSValue* v = ARG_src1;
    53205491
     
    53305501JSValue* Machine::cti_op_urshift(CTI_ARGS)
    53315502{
     5503    CTI_STACK_HACK();
     5504
    53325505    JSValue* val = ARG_src1;
    53335506    JSValue* shift = ARG_src2;
     
    53465519JSValue* Machine::cti_op_bitxor(CTI_ARGS)
    53475520{
     5521    CTI_STACK_HACK();
     5522
    53485523    JSValue* src1 = ARG_src1;
    53495524    JSValue* src2 = ARG_src2;
     
    53585533JSValue* Machine::cti_op_new_regexp(CTI_ARGS)
    53595534{
     5535    CTI_STACK_HACK();
     5536
    53605537    return new (ARG_globalData) RegExpObject(ARG_callFrame->lexicalGlobalObject()->regExpStructure(), ARG_regexp1);
    53615538}
     
    53635540JSValue* Machine::cti_op_bitor(CTI_ARGS)
    53645541{
     5542    CTI_STACK_HACK();
     5543
    53655544    JSValue* src1 = ARG_src1;
    53665545    JSValue* src2 = ARG_src2;
     
    53755554JSValue* Machine::cti_op_call_eval(CTI_ARGS)
    53765555{
     5556    CTI_STACK_HACK();
     5557
    53775558    CallFrame* callFrame = ARG_callFrame;
    53785559    RegisterFile* registerFile = ARG_registerFile;
     
    54005581void* Machine::cti_op_throw(CTI_ARGS)
    54015582{
     5583    CTI_STACK_HACK();
     5584
    54025585    CallFrame* callFrame = ARG_callFrame;
    54035586    CodeBlock* codeBlock = callFrame->codeBlock();
     
    54195602    void* catchRoutine = callFrame->codeBlock()->nativeExceptionCodeForHandlerVPC(handlerVPC);
    54205603    ASSERT(catchRoutine);
    5421     ctiSetReturnAddress(&CTI_RETURN_ADDRESS, catchRoutine);
     5604    CTI_SET_RETURN_ADDRESS(catchRoutine);
    54225605    return exceptionValue;
    54235606}
     
    54255608JSPropertyNameIterator* Machine::cti_op_get_pnames(CTI_ARGS)
    54265609{
     5610    CTI_STACK_HACK();
     5611
    54275612    return JSPropertyNameIterator::create(ARG_callFrame, ARG_src1);
    54285613}
     
    54305615JSValue* Machine::cti_op_next_pname(CTI_ARGS)
    54315616{
     5617    CTI_STACK_HACK();
     5618
    54325619    JSPropertyNameIterator* it = ARG_pni1;
    54335620    JSValue* temp = it->next(ARG_callFrame);
     
    54395626void Machine::cti_op_push_scope(CTI_ARGS)
    54405627{
     5628    CTI_STACK_HACK();
     5629
    54415630    JSObject* o = ARG_src1->toObject(ARG_callFrame);
    54425631    VM_CHECK_EXCEPTION_VOID();
     
    54465635void Machine::cti_op_pop_scope(CTI_ARGS)
    54475636{
     5637    CTI_STACK_HACK();
     5638
    54485639    ARG_callFrame->setScopeChain(ARG_callFrame->scopeChain()->pop());
    54495640}
     
    54515642JSValue* Machine::cti_op_typeof(CTI_ARGS)
    54525643{
     5644    CTI_STACK_HACK();
     5645
    54535646    return jsTypeStringForValue(ARG_callFrame, ARG_src1);
    54545647}
     
    54565649JSValue* Machine::cti_op_is_undefined(CTI_ARGS)
    54575650{
     5651    CTI_STACK_HACK();
     5652
    54585653    JSValue* v = ARG_src1;
    54595654    return jsBoolean(JSImmediate::isImmediate(v) ? v->isUndefined() : v->asCell()->structureID()->typeInfo().masqueradesAsUndefined());
     
    54625657JSValue* Machine::cti_op_is_boolean(CTI_ARGS)
    54635658{
     5659    CTI_STACK_HACK();
     5660
    54645661    return jsBoolean(ARG_src1->isBoolean());
    54655662}
     
    54675664JSValue* Machine::cti_op_is_number(CTI_ARGS)
    54685665{
     5666    CTI_STACK_HACK();
     5667
    54695668    return jsBoolean(ARG_src1->isNumber());
    54705669}
     
    54725671JSValue* Machine::cti_op_is_string(CTI_ARGS)
    54735672{
     5673    CTI_STACK_HACK();
     5674
    54745675    return jsBoolean(ARG_globalData->machine->isJSString(ARG_src1));
    54755676}
     
    54775678JSValue* Machine::cti_op_is_object(CTI_ARGS)
    54785679{
     5680    CTI_STACK_HACK();
     5681
    54795682    return jsBoolean(jsIsObjectType(ARG_src1));
    54805683}
     
    54825685JSValue* Machine::cti_op_is_function(CTI_ARGS)
    54835686{
     5687    CTI_STACK_HACK();
     5688
    54845689    return jsBoolean(jsIsFunctionType(ARG_src1));
    54855690}
     
    54875692JSValue* Machine::cti_op_stricteq(CTI_ARGS)
    54885693{
     5694    CTI_STACK_HACK();
     5695
    54895696    JSValue* src1 = ARG_src1;
    54905697    JSValue* src2 = ARG_src2;
     
    54995706JSValue* Machine::cti_op_nstricteq(CTI_ARGS)
    55005707{
     5708    CTI_STACK_HACK();
     5709
    55015710    JSValue* src1 = ARG_src1;
    55025711    JSValue* src2 = ARG_src2;
     
    55115720JSValue* Machine::cti_op_to_jsnumber(CTI_ARGS)
    55125721{
     5722    CTI_STACK_HACK();
     5723
    55135724    JSValue* src = ARG_src1;
    55145725    CallFrame* callFrame = ARG_callFrame;
     
    55215732JSValue* Machine::cti_op_in(CTI_ARGS)
    55225733{
     5734    CTI_STACK_HACK();
     5735
    55235736    CallFrame* callFrame = ARG_callFrame;
    55245737    JSValue* baseVal = ARG_src2;
     
    55475760JSValue* Machine::cti_op_push_new_scope(CTI_ARGS)
    55485761{
     5762    CTI_STACK_HACK();
     5763
    55495764    JSObject* scope = new (ARG_globalData) JSStaticScopeObject(ARG_callFrame, *ARG_id1, ARG_src2, DontDelete);
    55505765
     
    55565771void Machine::cti_op_jmp_scopes(CTI_ARGS)
    55575772{
     5773    CTI_STACK_HACK();
     5774
    55585775    unsigned count = ARG_int1;
    55595776    CallFrame* callFrame = ARG_callFrame;
     
    55675784void Machine::cti_op_put_by_index(CTI_ARGS)
    55685785{
     5786    CTI_STACK_HACK();
     5787
    55695788    CallFrame* callFrame = ARG_callFrame;
    55705789    unsigned property = ARG_int2;
     
    55755794void* Machine::cti_op_switch_imm(CTI_ARGS)
    55765795{
     5796    CTI_STACK_HACK();
     5797
    55775798    JSValue* scrutinee = ARG_src1;
    55785799    unsigned tableIndex = ARG_int2;
     
    55905811void* Machine::cti_op_switch_char(CTI_ARGS)
    55915812{
     5813    CTI_STACK_HACK();
     5814
    55925815    JSValue* scrutinee = ARG_src1;
    55935816    unsigned tableIndex = ARG_int2;
     
    56085831void* Machine::cti_op_switch_string(CTI_ARGS)
    56095832{
     5833    CTI_STACK_HACK();
     5834
    56105835    JSValue* scrutinee = ARG_src1;
    56115836    unsigned tableIndex = ARG_int2;
     
    56255850JSValue* Machine::cti_op_del_by_val(CTI_ARGS)
    56265851{
     5852    CTI_STACK_HACK();
     5853
    56275854    CallFrame* callFrame = ARG_callFrame;
    56285855
     
    56485875void Machine::cti_op_put_getter(CTI_ARGS)
    56495876{
     5877    CTI_STACK_HACK();
     5878
    56505879    CallFrame* callFrame = ARG_callFrame;
    56515880
     
    56595888void Machine::cti_op_put_setter(CTI_ARGS)
    56605889{
     5890    CTI_STACK_HACK();
     5891
    56615892    CallFrame* callFrame = ARG_callFrame;
    56625893
     
    56705901JSValue* Machine::cti_op_new_error(CTI_ARGS)
    56715902{
     5903    CTI_STACK_HACK();
     5904
    56725905    CallFrame* callFrame = ARG_callFrame;
    56735906    CodeBlock* codeBlock = callFrame->codeBlock();
     
    56815914void Machine::cti_op_debug(CTI_ARGS)
    56825915{
     5916    CTI_STACK_HACK();
     5917
    56835918    CallFrame* callFrame = ARG_callFrame;
    56845919
     
    56925927void* Machine::cti_vm_throw(CTI_ARGS)
    56935928{
     5929    CTI_STACK_HACK();
     5930
    56945931    CallFrame* callFrame = ARG_callFrame;
    56955932    CodeBlock* codeBlock = callFrame->codeBlock();
     
    57125949    void* catchRoutine = callFrame->codeBlock()->nativeExceptionCodeForHandlerVPC(handlerVPC);
    57135950    ASSERT(catchRoutine);
    5714     ctiSetReturnAddress(&CTI_RETURN_ADDRESS, catchRoutine);
     5951    CTI_SET_RETURN_ADDRESS(catchRoutine);
    57155952    return exceptionValue;
    57165953}
Note: See TracChangeset for help on using the changeset viewer.