OLD | NEW |
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 1169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1180 | 1180 |
1181 void pop() { | 1181 void pop() { |
1182 add(sp, sp, Operand(kPointerSize)); | 1182 add(sp, sp, Operand(kPointerSize)); |
1183 } | 1183 } |
1184 | 1184 |
1185 // Jump unconditionally to given label. | 1185 // Jump unconditionally to given label. |
1186 void jmp(Label* L) { b(L, al); } | 1186 void jmp(Label* L) { b(L, al); } |
1187 | 1187 |
1188 bool predictable_code_size() const { return predictable_code_size_; } | 1188 bool predictable_code_size() const { return predictable_code_size_; } |
1189 | 1189 |
1190 static bool allow_immediate_constant_pool_loads( | 1190 static bool use_immediate_constant_pool_loads( |
1191 const Assembler* assembler) { | 1191 const Assembler* assembler) { |
| 1192 #ifdef USE_BLX |
1192 return CpuFeatures::IsSupported(MOVW_MOVT_IMMEDIATE_LOADS) && | 1193 return CpuFeatures::IsSupported(MOVW_MOVT_IMMEDIATE_LOADS) && |
1193 (assembler == NULL || !assembler->predictable_code_size()); | 1194 (assembler == NULL || !assembler->predictable_code_size()); |
| 1195 #else |
| 1196 // If not using BLX, all loads from the constant pool cannot be immediate, |
| 1197 // because the ldr pc, [pc + #xxxx] used for calls must be a single |
| 1198 // instruction and cannot be easily distinguished out of context from |
| 1199 // other loads that could use movw/movt. |
| 1200 return false; |
| 1201 #endif |
1194 } | 1202 } |
1195 | 1203 |
1196 // Check the code size generated from label to here. | 1204 // Check the code size generated from label to here. |
1197 int SizeOfCodeGeneratedSince(Label* label) { | 1205 int SizeOfCodeGeneratedSince(Label* label) { |
1198 return pc_offset() - label->pos(); | 1206 return pc_offset() - label->pos(); |
1199 } | 1207 } |
1200 | 1208 |
1201 // Check the number of instructions generated from label to here. | 1209 // Check the number of instructions generated from label to here. |
1202 int InstructionsGeneratedSince(Label* label) { | 1210 int InstructionsGeneratedSince(Label* label) { |
1203 return SizeOfCodeGeneratedSince(label) / kInstrSize; | 1211 return SizeOfCodeGeneratedSince(label) / kInstrSize; |
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1520 | 1528 |
1521 private: | 1529 private: |
1522 Assembler* asm_; | 1530 Assembler* asm_; |
1523 bool old_value_; | 1531 bool old_value_; |
1524 }; | 1532 }; |
1525 | 1533 |
1526 | 1534 |
1527 } } // namespace v8::internal | 1535 } } // namespace v8::internal |
1528 | 1536 |
1529 #endif // V8_ARM_ASSEMBLER_ARM_H_ | 1537 #endif // V8_ARM_ASSEMBLER_ARM_H_ |
OLD | NEW |