OLD | NEW |
1 // Copyright 2010 the V8 project authors. All rights reserved. | 1 // Copyright 2010 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 479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 void AllocateHeapNumberWithValue(Register result, | 490 void AllocateHeapNumberWithValue(Register result, |
491 DwVfpRegister value, | 491 DwVfpRegister value, |
492 Register scratch1, | 492 Register scratch1, |
493 Register scratch2, | 493 Register scratch2, |
494 Register heap_number_map, | 494 Register heap_number_map, |
495 Label* gc_required); | 495 Label* gc_required); |
496 | 496 |
497 // Copies a fixed number of fields of heap objects from src to dst. | 497 // Copies a fixed number of fields of heap objects from src to dst. |
498 void CopyFields(Register dst, Register src, RegList temps, int field_count); | 498 void CopyFields(Register dst, Register src, RegList temps, int field_count); |
499 | 499 |
| 500 // Copies a number of bytes from src to dst. All registers are clobbered. On |
| 501 // exit src and dst will point to the place just after where the last byte was |
| 502 // read or written and length will be zero. |
| 503 void CopyBytes(Register src, |
| 504 Register dst, |
| 505 Register length, |
| 506 Register scratch); |
| 507 |
500 // --------------------------------------------------------------------------- | 508 // --------------------------------------------------------------------------- |
501 // Support functions. | 509 // Support functions. |
502 | 510 |
503 // Try to get function prototype of a function and puts the value in | 511 // Try to get function prototype of a function and puts the value in |
504 // the result register. Checks that the function really is a | 512 // the result register. Checks that the function really is a |
505 // function and jumps to the miss label if the fast checks fail. The | 513 // function and jumps to the miss label if the fast checks fail. The |
506 // function register will be untouched; the other registers may be | 514 // function register will be untouched; the other registers may be |
507 // clobbered. | 515 // clobbered. |
508 void TryGetFunctionPrototype(Register function, | 516 void TryGetFunctionPrototype(Register function, |
509 Register result, | 517 Register result, |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
770 // Try to convert int32 to smi. If the value is to large, preserve | 778 // Try to convert int32 to smi. If the value is to large, preserve |
771 // the original value and jump to not_a_smi. Destroys scratch and | 779 // the original value and jump to not_a_smi. Destroys scratch and |
772 // sets flags. | 780 // sets flags. |
773 void TrySmiTag(Register reg, Label* not_a_smi, Register scratch) { | 781 void TrySmiTag(Register reg, Label* not_a_smi, Register scratch) { |
774 mov(scratch, reg); | 782 mov(scratch, reg); |
775 SmiTag(scratch, SetCC); | 783 SmiTag(scratch, SetCC); |
776 b(vs, not_a_smi); | 784 b(vs, not_a_smi); |
777 mov(reg, scratch); | 785 mov(reg, scratch); |
778 } | 786 } |
779 | 787 |
780 void SmiUntag(Register reg) { | 788 void SmiUntag(Register reg, SBit s = LeaveCC) { |
781 mov(reg, Operand(reg, ASR, kSmiTagSize)); | 789 mov(reg, Operand(reg, ASR, kSmiTagSize), s); |
782 } | 790 } |
783 void SmiUntag(Register dst, Register src) { | 791 void SmiUntag(Register dst, Register src, SBit s = LeaveCC) { |
784 mov(dst, Operand(src, ASR, kSmiTagSize)); | 792 mov(dst, Operand(src, ASR, kSmiTagSize), s); |
785 } | 793 } |
786 | 794 |
787 // Jump the register contains a smi. | 795 // Jump the register contains a smi. |
788 inline void JumpIfSmi(Register value, Label* smi_label) { | 796 inline void JumpIfSmi(Register value, Label* smi_label) { |
789 tst(value, Operand(kSmiTagMask)); | 797 tst(value, Operand(kSmiTagMask)); |
790 b(eq, smi_label); | 798 b(eq, smi_label); |
791 } | 799 } |
792 // Jump if either of the registers contain a non-smi. | 800 // Jump if either of the registers contain a non-smi. |
793 inline void JumpIfNotSmi(Register value, Label* not_smi_label) { | 801 inline void JumpIfNotSmi(Register value, Label* not_smi_label) { |
794 tst(value, Operand(kSmiTagMask)); | 802 tst(value, Operand(kSmiTagMask)); |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
965 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) | 973 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) |
966 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> | 974 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> |
967 #else | 975 #else |
968 #define ACCESS_MASM(masm) masm-> | 976 #define ACCESS_MASM(masm) masm-> |
969 #endif | 977 #endif |
970 | 978 |
971 | 979 |
972 } } // namespace v8::internal | 980 } } // namespace v8::internal |
973 | 981 |
974 #endif // V8_ARM_MACRO_ASSEMBLER_ARM_H_ | 982 #endif // V8_ARM_MACRO_ASSEMBLER_ARM_H_ |
OLD | NEW |