| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 // Setup call kind marking in rcx. The method takes rcx as an | 326 // Setup call kind marking in rcx. The method takes rcx as an |
| 327 // explicit first parameter to make the code more readable at the | 327 // explicit first parameter to make the code more readable at the |
| 328 // call sites. | 328 // call sites. |
| 329 void SetCallKind(Register dst, CallKind kind); | 329 void SetCallKind(Register dst, CallKind kind); |
| 330 | 330 |
| 331 // Invoke the JavaScript function code by either calling or jumping. | 331 // Invoke the JavaScript function code by either calling or jumping. |
| 332 void InvokeCode(Register code, | 332 void InvokeCode(Register code, |
| 333 const ParameterCount& expected, | 333 const ParameterCount& expected, |
| 334 const ParameterCount& actual, | 334 const ParameterCount& actual, |
| 335 InvokeFlag flag, | 335 InvokeFlag flag, |
| 336 const CallWrapper& call_wrapper = NullCallWrapper(), | 336 const CallWrapper& call_wrapper, |
| 337 CallKind call_kind = CALL_AS_METHOD); | 337 CallKind call_kind); |
| 338 | 338 |
| 339 void InvokeCode(Handle<Code> code, | 339 void InvokeCode(Handle<Code> code, |
| 340 const ParameterCount& expected, | 340 const ParameterCount& expected, |
| 341 const ParameterCount& actual, | 341 const ParameterCount& actual, |
| 342 RelocInfo::Mode rmode, | 342 RelocInfo::Mode rmode, |
| 343 InvokeFlag flag, | 343 InvokeFlag flag, |
| 344 const CallWrapper& call_wrapper = NullCallWrapper(), | 344 const CallWrapper& call_wrapper, |
| 345 CallKind call_kind = CALL_AS_METHOD); | 345 CallKind call_kind); |
| 346 | 346 |
| 347 // Invoke the JavaScript function in the given register. Changes the | 347 // Invoke the JavaScript function in the given register. Changes the |
| 348 // current context to the context in the function before invoking. | 348 // current context to the context in the function before invoking. |
| 349 void InvokeFunction(Register function, | 349 void InvokeFunction(Register function, |
| 350 const ParameterCount& actual, | 350 const ParameterCount& actual, |
| 351 InvokeFlag flag, | 351 InvokeFlag flag, |
| 352 const CallWrapper& call_wrapper = NullCallWrapper(), | 352 const CallWrapper& call_wrapper, |
| 353 CallKind call_kind = CALL_AS_METHOD); | 353 CallKind call_kind); |
| 354 | 354 |
| 355 void InvokeFunction(JSFunction* function, | 355 void InvokeFunction(JSFunction* function, |
| 356 const ParameterCount& actual, | 356 const ParameterCount& actual, |
| 357 InvokeFlag flag, | 357 InvokeFlag flag, |
| 358 const CallWrapper& call_wrapper = NullCallWrapper()); | 358 const CallWrapper& call_wrapper, |
| 359 CallKind call_kind); |
| 359 | 360 |
| 360 // Invoke specified builtin JavaScript function. Adds an entry to | 361 // Invoke specified builtin JavaScript function. Adds an entry to |
| 361 // the unresolved list if the name does not resolve. | 362 // the unresolved list if the name does not resolve. |
| 362 void InvokeBuiltin(Builtins::JavaScript id, | 363 void InvokeBuiltin(Builtins::JavaScript id, |
| 363 InvokeFlag flag, | 364 InvokeFlag flag, |
| 364 const CallWrapper& call_wrapper = NullCallWrapper()); | 365 const CallWrapper& call_wrapper = NullCallWrapper()); |
| 365 | 366 |
| 366 // Store the function for the given builtin in the target register. | 367 // Store the function for the given builtin in the target register. |
| 367 void GetBuiltinFunction(Register target, Builtins::JavaScript id); | 368 void GetBuiltinFunction(Register target, Builtins::JavaScript id); |
| 368 | 369 |
| (...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 // Compare object type for heap object. | 829 // Compare object type for heap object. |
| 829 // Always use unsigned comparisons: above and below, not less and greater. | 830 // Always use unsigned comparisons: above and below, not less and greater. |
| 830 // Incoming register is heap_object and outgoing register is map. | 831 // Incoming register is heap_object and outgoing register is map. |
| 831 // They may be the same register, and may be kScratchRegister. | 832 // They may be the same register, and may be kScratchRegister. |
| 832 void CmpObjectType(Register heap_object, InstanceType type, Register map); | 833 void CmpObjectType(Register heap_object, InstanceType type, Register map); |
| 833 | 834 |
| 834 // Compare instance type for map. | 835 // Compare instance type for map. |
| 835 // Always use unsigned comparisons: above and below, not less and greater. | 836 // Always use unsigned comparisons: above and below, not less and greater. |
| 836 void CmpInstanceType(Register map, InstanceType type); | 837 void CmpInstanceType(Register map, InstanceType type); |
| 837 | 838 |
| 839 // Check if a map for a JSObject indicates that the object has fast elements. |
| 840 // Jump to the specified label if it does not. |
| 841 void CheckFastElements(Register map, |
| 842 Label* fail, |
| 843 Label::Distance distance = Label::kFar); |
| 844 |
| 838 // Check if the map of an object is equal to a specified map and | 845 // Check if the map of an object is equal to a specified map and |
| 839 // branch to label if not. Skip the smi check if not required | 846 // branch to label if not. Skip the smi check if not required |
| 840 // (object is known to be a heap object) | 847 // (object is known to be a heap object) |
| 841 void CheckMap(Register obj, | 848 void CheckMap(Register obj, |
| 842 Handle<Map> map, | 849 Handle<Map> map, |
| 843 Label* fail, | 850 Label* fail, |
| 844 SmiCheckType smi_check_type); | 851 SmiCheckType smi_check_type); |
| 845 | 852 |
| 846 // Check if the map of an object is equal to a specified map and branch to a | 853 // Check if the map of an object is equal to a specified map and branch to a |
| 847 // specified target if equal. Skip the smi check if not required (object is | 854 // specified target if equal. Skip the smi check if not required (object is |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 914 | 921 |
| 915 // Generate code for checking access rights - used for security checks | 922 // Generate code for checking access rights - used for security checks |
| 916 // on access to global objects across environments. The holder register | 923 // on access to global objects across environments. The holder register |
| 917 // is left untouched, but the scratch register and kScratchRegister, | 924 // is left untouched, but the scratch register and kScratchRegister, |
| 918 // which must be different, are clobbered. | 925 // which must be different, are clobbered. |
| 919 void CheckAccessGlobalProxy(Register holder_reg, | 926 void CheckAccessGlobalProxy(Register holder_reg, |
| 920 Register scratch, | 927 Register scratch, |
| 921 Label* miss); | 928 Label* miss); |
| 922 | 929 |
| 923 | 930 |
| 931 void LoadFromNumberDictionary(Label* miss, |
| 932 Register elements, |
| 933 Register key, |
| 934 Register r0, |
| 935 Register r1, |
| 936 Register r2, |
| 937 Register result); |
| 938 |
| 939 |
| 924 // --------------------------------------------------------------------------- | 940 // --------------------------------------------------------------------------- |
| 925 // Allocation support | 941 // Allocation support |
| 926 | 942 |
| 927 // Allocate an object in new space. If the new space is exhausted control | 943 // Allocate an object in new space. If the new space is exhausted control |
| 928 // continues at the gc_required label. The allocated object is returned in | 944 // continues at the gc_required label. The allocated object is returned in |
| 929 // result and end of the new object is returned in result_end. The register | 945 // result and end of the new object is returned in result_end. The register |
| 930 // scratch can be passed as no_reg in which case an additional object | 946 // scratch can be passed as no_reg in which case an additional object |
| 931 // reference will be added to the reloc info. The returned pointers in result | 947 // reference will be added to the reloc info. The returned pointers in result |
| 932 // and result_end have not yet been tagged as heap objects. If | 948 // and result_end have not yet been tagged as heap objects. If |
| 933 // result_contains_top_on_entry is true the content of result is known to be | 949 // result_contains_top_on_entry is true the content of result is known to be |
| (...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1377 masm->popfd(); \ | 1393 masm->popfd(); \ |
| 1378 } \ | 1394 } \ |
| 1379 masm-> | 1395 masm-> |
| 1380 #else | 1396 #else |
| 1381 #define ACCESS_MASM(masm) masm-> | 1397 #define ACCESS_MASM(masm) masm-> |
| 1382 #endif | 1398 #endif |
| 1383 | 1399 |
| 1384 } } // namespace v8::internal | 1400 } } // namespace v8::internal |
| 1385 | 1401 |
| 1386 #endif // V8_X64_MACRO_ASSEMBLER_X64_H_ | 1402 #endif // V8_X64_MACRO_ASSEMBLER_X64_H_ |
| OLD | NEW |