Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(439)

Side by Side Diff: src/arm/assembler-arm.h

Issue 1787005: Avoid constant pool blocking for too long... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | src/arm/assembler-arm.cc » ('j') | src/arm/codegen-arm.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions 5 // modification, are permitted provided that the following conditions
6 // are met: 6 // are met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 923 matching lines...) Expand 10 before | Expand all | Expand 10 after
934 ~BlockConstPoolScope() { 934 ~BlockConstPoolScope() {
935 assem_->EndBlockConstPool(); 935 assem_->EndBlockConstPool();
936 } 936 }
937 937
938 private: 938 private:
939 Assembler* assem_; 939 Assembler* assem_;
940 940
941 DISALLOW_IMPLICIT_CONSTRUCTORS(BlockConstPoolScope); 941 DISALLOW_IMPLICIT_CONSTRUCTORS(BlockConstPoolScope);
942 }; 942 };
943 943
944 // Postpone the generation of the constant pool for the specified number of
945 // instructions.
946 void BlockConstPoolFor(int instructions);
947
944 // Debugging 948 // Debugging
945 949
946 // Mark address of the ExitJSFrame code. 950 // Mark address of the ExitJSFrame code.
947 void RecordJSReturn(); 951 void RecordJSReturn();
948 952
949 // Record a comment relocation entry that can be used by a disassembler. 953 // Record a comment relocation entry that can be used by a disassembler.
950 // Use --debug_code to enable. 954 // Use --debug_code to enable.
951 void RecordComment(const char* msg); 955 void RecordComment(const char* msg);
952 956
953 void RecordPosition(int pos); 957 void RecordPosition(int pos);
954 void RecordStatementPosition(int pos); 958 void RecordStatementPosition(int pos);
955 void WriteRecordedPositions(); 959 void WriteRecordedPositions();
956 960
957 int pc_offset() const { return pc_ - buffer_; } 961 int pc_offset() const { return pc_ - buffer_; }
958 int current_position() const { return current_position_; } 962 int current_position() const { return current_position_; }
959 int current_statement_position() const { return current_statement_position_; } 963 int current_statement_position() const { return current_statement_position_; }
960 964
961 void StartBlockConstPool() {
962 const_pool_blocked_nesting_++;
963 }
964 void EndBlockConstPool() {
965 const_pool_blocked_nesting_--;
966 }
967
968 // Read/patch instructions 965 // Read/patch instructions
969 static Instr instr_at(byte* pc) { return *reinterpret_cast<Instr*>(pc); } 966 static Instr instr_at(byte* pc) { return *reinterpret_cast<Instr*>(pc); }
970 static void instr_at_put(byte* pc, Instr instr) { 967 static void instr_at_put(byte* pc, Instr instr) {
971 *reinterpret_cast<Instr*>(pc) = instr; 968 *reinterpret_cast<Instr*>(pc) = instr;
972 } 969 }
973 static bool IsNop(Instr instr, int type = 0); 970 static bool IsNop(Instr instr, int type = 0);
974 static bool IsBranch(Instr instr); 971 static bool IsBranch(Instr instr);
975 static int GetBranchOffset(Instr instr); 972 static int GetBranchOffset(Instr instr);
976 static bool IsLdrRegisterImmediate(Instr instr); 973 static bool IsLdrRegisterImmediate(Instr instr);
977 static int GetLdrRegisterImmediateOffset(Instr instr); 974 static int GetLdrRegisterImmediateOffset(Instr instr);
(...skipping 16 matching lines...) Expand all
994 void target_at_put(int pos, int target_pos); 991 void target_at_put(int pos, int target_pos);
995 992
996 // Check if is time to emit a constant pool for pending reloc info entries 993 // Check if is time to emit a constant pool for pending reloc info entries
997 void CheckConstPool(bool force_emit, bool require_jump); 994 void CheckConstPool(bool force_emit, bool require_jump);
998 995
999 // Block the emission of the constant pool before pc_offset 996 // Block the emission of the constant pool before pc_offset
1000 void BlockConstPoolBefore(int pc_offset) { 997 void BlockConstPoolBefore(int pc_offset) {
1001 if (no_const_pool_before_ < pc_offset) no_const_pool_before_ = pc_offset; 998 if (no_const_pool_before_ < pc_offset) no_const_pool_before_ = pc_offset;
1002 } 999 }
1003 1000
1001 void StartBlockConstPool() {
1002 const_pool_blocked_nesting_++;
1003 }
1004 void EndBlockConstPool() {
1005 const_pool_blocked_nesting_--;
1006 }
1007
1004 private: 1008 private:
1005 // Code buffer: 1009 // Code buffer:
1006 // The buffer into which code and relocation info are generated. 1010 // The buffer into which code and relocation info are generated.
1007 byte* buffer_; 1011 byte* buffer_;
1008 int buffer_size_; 1012 int buffer_size_;
1009 // True if the assembler owns the buffer, false if buffer is external. 1013 // True if the assembler owns the buffer, false if buffer is external.
1010 bool own_buffer_; 1014 bool own_buffer_;
1011 1015
1012 // Buffer size and constant pool distance are checked together at regular 1016 // Buffer size and constant pool distance are checked together at regular
1013 // intervals of kBufferCheckInterval emitted bytes 1017 // intervals of kBufferCheckInterval emitted bytes
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1103 1107
1104 friend class RegExpMacroAssemblerARM; 1108 friend class RegExpMacroAssemblerARM;
1105 friend class RelocInfo; 1109 friend class RelocInfo;
1106 friend class CodePatcher; 1110 friend class CodePatcher;
1107 friend class BlockConstPoolScope; 1111 friend class BlockConstPoolScope;
1108 }; 1112 };
1109 1113
1110 } } // namespace v8::internal 1114 } } // namespace v8::internal
1111 1115
1112 #endif // V8_ARM_ASSEMBLER_ARM_H_ 1116 #endif // V8_ARM_ASSEMBLER_ARM_H_
OLDNEW
« no previous file with comments | « no previous file | src/arm/assembler-arm.cc » ('j') | src/arm/codegen-arm.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698