| OLD | NEW | 
|     1 // Copyright 2012 the V8 project authors. All rights reserved. |     1 // Copyright 2012 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 225 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   236   // then we just fall through, since it is already live.  If it is white and |   236   // then we just fall through, since it is already live.  If it is white and | 
|   237   // we can determine that it doesn't need to be scanned, then we just mark it |   237   // we can determine that it doesn't need to be scanned, then we just mark it | 
|   238   // black and fall through.  For the rest we jump to the label so the |   238   // black and fall through.  For the rest we jump to the label so the | 
|   239   // incremental marker can fix its assumptions. |   239   // incremental marker can fix its assumptions. | 
|   240   void EnsureNotWhite(Register object, |   240   void EnsureNotWhite(Register object, | 
|   241                       Register scratch1, |   241                       Register scratch1, | 
|   242                       Register scratch2, |   242                       Register scratch2, | 
|   243                       Register scratch3, |   243                       Register scratch3, | 
|   244                       Label* object_is_white_and_not_data); |   244                       Label* object_is_white_and_not_data); | 
|   245  |   245  | 
|   246   // Detects conservatively whether an object is data-only, ie it does need to |   246   // Detects conservatively whether an object is data-only, i.e. it does need to | 
|   247   // be scanned by the garbage collector. |   247   // be scanned by the garbage collector. | 
|   248   void JumpIfDataObject(Register value, |   248   void JumpIfDataObject(Register value, | 
|   249                         Register scratch, |   249                         Register scratch, | 
|   250                         Label* not_data_object); |   250                         Label* not_data_object); | 
|   251  |   251  | 
|   252   // Notify the garbage collector that we wrote a pointer into an object. |   252   // Notify the garbage collector that we wrote a pointer into an object. | 
|   253   // |object| is the object being stored into, |value| is the object being |   253   // |object| is the object being stored into, |value| is the object being | 
|   254   // stored.  value and scratch registers are clobbered by the operation. |   254   // stored.  value and scratch registers are clobbered by the operation. | 
|   255   // The offset is the offset from the start of the object, not the offset from |   255   // The offset is the offset from the start of the object, not the offset from | 
|   256   // the tagged HeapObject pointer.  For use with FieldOperand(reg, off). |   256   // the tagged HeapObject pointer.  For use with FieldOperand(reg, off). | 
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   599                                 Register t0, |   599                                 Register t0, | 
|   600                                 Register t1, |   600                                 Register t1, | 
|   601                                 Register t2); |   601                                 Register t2); | 
|   602  |   602  | 
|   603  |   603  | 
|   604   inline void MarkCode(NopMarkerTypes type) { |   604   inline void MarkCode(NopMarkerTypes type) { | 
|   605     nop(type); |   605     nop(type); | 
|   606   } |   606   } | 
|   607  |   607  | 
|   608   // Check if the given instruction is a 'type' marker. |   608   // Check if the given instruction is a 'type' marker. | 
|   609   // ie. check if is is a mov r<type>, r<type> (referenced as nop(type)) |   609   // i.e. check if is is a mov r<type>, r<type> (referenced as nop(type)) | 
|   610   // These instructions are generated to mark special location in the code, |   610   // These instructions are generated to mark special location in the code, | 
|   611   // like some special IC code. |   611   // like some special IC code. | 
|   612   static inline bool IsMarkedCode(Instr instr, int type) { |   612   static inline bool IsMarkedCode(Instr instr, int type) { | 
|   613     ASSERT((FIRST_IC_MARKER <= type) && (type < LAST_CODE_MARKER)); |   613     ASSERT((FIRST_IC_MARKER <= type) && (type < LAST_CODE_MARKER)); | 
|   614     return IsNop(instr, type); |   614     return IsNop(instr, type); | 
|   615   } |   615   } | 
|   616  |   616  | 
|   617  |   617  | 
|   618   static inline int GetCodeMarker(Instr instr) { |   618   static inline int GetCodeMarker(Instr instr) { | 
|   619     int dst_reg_offset = 12; |   619     int dst_reg_offset = 12; | 
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   803   // compare sequences branches to early_success. |   803   // compare sequences branches to early_success. | 
|   804   void CompareMap(Register obj, |   804   void CompareMap(Register obj, | 
|   805                   Register scratch, |   805                   Register scratch, | 
|   806                   Handle<Map> map, |   806                   Handle<Map> map, | 
|   807                   Label* early_success, |   807                   Label* early_success, | 
|   808                   CompareMapMode mode = REQUIRE_EXACT_MAP); |   808                   CompareMapMode mode = REQUIRE_EXACT_MAP); | 
|   809  |   809  | 
|   810   // Check if the map of an object is equal to a specified map and branch to |   810   // Check if the map of an object is equal to a specified map and branch to | 
|   811   // label if not. Skip the smi check if not required (object is known to be a |   811   // label if not. Skip the smi check if not required (object is known to be a | 
|   812   // heap object). If mode is ALLOW_ELEMENT_TRANSITION_MAPS, then also match |   812   // heap object). If mode is ALLOW_ELEMENT_TRANSITION_MAPS, then also match | 
|   813   // against maps that are ElementsKind transition maps of the specificed map. |   813   // against maps that are ElementsKind transition maps of the specified map. | 
|   814   void CheckMap(Register obj, |   814   void CheckMap(Register obj, | 
|   815                 Register scratch, |   815                 Register scratch, | 
|   816                 Handle<Map> map, |   816                 Handle<Map> map, | 
|   817                 Label* fail, |   817                 Label* fail, | 
|   818                 SmiCheckType smi_check_type, |   818                 SmiCheckType smi_check_type, | 
|   819                 CompareMapMode mode = REQUIRE_EXACT_MAP); |   819                 CompareMapMode mode = REQUIRE_EXACT_MAP); | 
|   820  |   820  | 
|   821  |   821  | 
|   822   void CheckMap(Register obj, |   822   void CheckMap(Register obj, | 
|   823                 Register scratch, |   823                 Register scratch, | 
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   901   void ConvertToInt32(Register source, |   901   void ConvertToInt32(Register source, | 
|   902                       Register dest, |   902                       Register dest, | 
|   903                       Register scratch, |   903                       Register scratch, | 
|   904                       Register scratch2, |   904                       Register scratch2, | 
|   905                       DwVfpRegister double_scratch, |   905                       DwVfpRegister double_scratch, | 
|   906                       Label *not_int32); |   906                       Label *not_int32); | 
|   907  |   907  | 
|   908   // Truncates a double using a specific rounding mode. |   908   // Truncates a double using a specific rounding mode. | 
|   909   // Clears the z flag (ne condition) if an overflow occurs. |   909   // Clears the z flag (ne condition) if an overflow occurs. | 
|   910   // If exact_conversion is true, the z flag is also cleared if the conversion |   910   // If exact_conversion is true, the z flag is also cleared if the conversion | 
|   911   // was inexact, ie. if the double value could not be converted exactly |   911   // was inexact, i.e. if the double value could not be converted exactly | 
|   912   // to a 32bit integer. |   912   // to a 32bit integer. | 
|   913   void EmitVFPTruncate(VFPRoundingMode rounding_mode, |   913   void EmitVFPTruncate(VFPRoundingMode rounding_mode, | 
|   914                        SwVfpRegister result, |   914                        SwVfpRegister result, | 
|   915                        DwVfpRegister double_input, |   915                        DwVfpRegister double_input, | 
|   916                        Register scratch1, |   916                        Register scratch1, | 
|   917                        Register scratch2, |   917                        Register scratch2, | 
|   918                        CheckForInexactConversion check |   918                        CheckForInexactConversion check | 
|   919                            = kDontCheckForInexactConversion); |   919                            = kDontCheckForInexactConversion); | 
|   920  |   920  | 
|   921   // Helper for EmitECMATruncate. |   921   // Helper for EmitECMATruncate. | 
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1018                      int num_reg_arguments, |  1018                      int num_reg_arguments, | 
|  1019                      int num_double_arguments); |  1019                      int num_double_arguments); | 
|  1020   void CallCFunction(Register function, |  1020   void CallCFunction(Register function, | 
|  1021                      int num_reg_arguments, |  1021                      int num_reg_arguments, | 
|  1022                      int num_double_arguments); |  1022                      int num_double_arguments); | 
|  1023  |  1023  | 
|  1024   void GetCFunctionDoubleResult(const DoubleRegister dst); |  1024   void GetCFunctionDoubleResult(const DoubleRegister dst); | 
|  1025  |  1025  | 
|  1026   // Calls an API function.  Allocates HandleScope, extracts returned value |  1026   // Calls an API function.  Allocates HandleScope, extracts returned value | 
|  1027   // from handle and propagates exceptions.  Restores context.  stack_space |  1027   // from handle and propagates exceptions.  Restores context.  stack_space | 
|  1028   // - space to be unwound on exit (includes the call js arguments space and |  1028   // - space to be unwound on exit (includes the call JS arguments space and | 
|  1029   // the additional space allocated for the fast call). |  1029   // the additional space allocated for the fast call). | 
|  1030   void CallApiFunctionAndReturn(ExternalReference function, int stack_space); |  1030   void CallApiFunctionAndReturn(ExternalReference function, int stack_space); | 
|  1031  |  1031  | 
|  1032   // Jump to a runtime routine. |  1032   // Jump to a runtime routine. | 
|  1033   void JumpToExternalReference(const ExternalReference& builtin); |  1033   void JumpToExternalReference(const ExternalReference& builtin); | 
|  1034  |  1034  | 
|  1035   // Invoke specified builtin JavaScript function. Adds an entry to |  1035   // Invoke specified builtin JavaScript function. Adds an entry to | 
|  1036   // the unresolved list if the name does not resolve. |  1036   // the unresolved list if the name does not resolve. | 
|  1037   void InvokeBuiltin(Builtins::JavaScript id, |  1037   void InvokeBuiltin(Builtins::JavaScript id, | 
|  1038                      InvokeFlag flag, |  1038                      InvokeFlag flag, | 
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1344 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) |  1344 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) | 
|  1345 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> |  1345 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> | 
|  1346 #else |  1346 #else | 
|  1347 #define ACCESS_MASM(masm) masm-> |  1347 #define ACCESS_MASM(masm) masm-> | 
|  1348 #endif |  1348 #endif | 
|  1349  |  1349  | 
|  1350  |  1350  | 
|  1351 } }  // namespace v8::internal |  1351 } }  // namespace v8::internal | 
|  1352  |  1352  | 
|  1353 #endif  // V8_ARM_MACRO_ASSEMBLER_ARM_H_ |  1353 #endif  // V8_ARM_MACRO_ASSEMBLER_ARM_H_ | 
| OLD | NEW |