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 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
158 p13 = 13, | 158 p13 = 13, |
159 p14 = 14, | 159 p14 = 14, |
160 p15 = 15 | 160 p15 = 15 |
161 }; | 161 }; |
162 | 162 |
163 | 163 |
164 // Condition field in instructions | 164 // Condition field in instructions |
165 enum Condition { | 165 enum Condition { |
166 eq = 0 << 28, // Z set equal. | 166 eq = 0 << 28, // Z set equal. |
167 ne = 1 << 28, // Z clear not equal. | 167 ne = 1 << 28, // Z clear not equal. |
168 cs = 2 << 28, // C set unsigned higher or same. | 168 nz = 1 << 28, // Z clear not zero. |
169 cs = 2 << 28, // C set carry set. | |
169 hs = 2 << 28, // C set unsigned higher or same. | 170 hs = 2 << 28, // C set unsigned higher or same. |
170 cc = 3 << 28, // C clear unsigned lower. | 171 cc = 3 << 28, // C clear carry clear. |
171 lo = 3 << 28, // C clear unsigned lower. | 172 lo = 3 << 28, // C clear unsigned lower. |
172 mi = 4 << 28, // N set negative. | 173 mi = 4 << 28, // N set negative. |
173 pl = 5 << 28, // N clear positive or zero. | 174 pl = 5 << 28, // N clear positive or zero. |
174 vs = 6 << 28, // V set overflow. | 175 vs = 6 << 28, // V set overflow. |
175 vc = 7 << 28, // V clear no overflow. | 176 vc = 7 << 28, // V clear no overflow. |
176 hi = 8 << 28, // C set, Z clear unsigned higher. | 177 hi = 8 << 28, // C set, Z clear unsigned higher. |
177 ls = 9 << 28, // C clear or Z set unsigned lower or same. | 178 ls = 9 << 28, // C clear or Z set unsigned lower or same. |
178 ge = 10 << 28, // N == V greater or equal. | 179 ge = 10 << 28, // N == V greater or equal. |
179 lt = 11 << 28, // N != V less than. | 180 lt = 11 << 28, // N != V less than. |
180 gt = 12 << 28, // Z clear, N == V greater than. | 181 gt = 12 << 28, // Z clear, N == V greater than. |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
413 // Note: The same Label can be used for forward and backward branches | 414 // Note: The same Label can be used for forward and backward branches |
414 // but it may be bound only once. | 415 // but it may be bound only once. |
415 | 416 |
416 void bind(Label* L); // binds an unbound label L to the current code position | 417 void bind(Label* L); // binds an unbound label L to the current code position |
417 | 418 |
418 // Returns the branch offset to the given label from the current code position | 419 // Returns the branch offset to the given label from the current code position |
419 // Links the label to the current position if it is still unbound | 420 // Links the label to the current position if it is still unbound |
420 // Manages the jump elimination optimization if the second parameter is true. | 421 // Manages the jump elimination optimization if the second parameter is true. |
421 int branch_offset(Label* L, bool jump_elimination_allowed); | 422 int branch_offset(Label* L, bool jump_elimination_allowed); |
422 | 423 |
424 // Puts a labels target address at the given position. | |
Erik Corry
2009/08/27 14:43:05
labels -> label's
| |
425 // The high 8 bits are set to zero. | |
Erik Corry
2009/08/27 14:43:05
I wonder why?
| |
426 void label_at_put(Label* L, int at_offset); | |
Erik Corry
2009/08/27 14:43:05
Gotta love that smalltalk syntax, but the index sh
| |
427 | |
423 // Return the address in the constant pool of the code target address used by | 428 // Return the address in the constant pool of the code target address used by |
424 // the branch/call instruction at pc. | 429 // the branch/call instruction at pc. |
425 INLINE(static Address target_address_address_at(Address pc)); | 430 INLINE(static Address target_address_address_at(Address pc)); |
426 | 431 |
427 // Read/Modify the code target address in the branch/call instruction at pc. | 432 // Read/Modify the code target address in the branch/call instruction at pc. |
428 INLINE(static Address target_address_at(Address pc)); | 433 INLINE(static Address target_address_at(Address pc)); |
429 INLINE(static void set_target_address_at(Address pc, Address target)); | 434 INLINE(static void set_target_address_at(Address pc, Address target)); |
430 | 435 |
431 // Distance between the instruction referring to the address of the call | 436 // Distance between the instruction referring to the address of the call |
432 // target (ldr pc, [target addr in const pool]) and the return address | 437 // target (ldr pc, [target addr in const pool]) and the return address |
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
777 void addrmod5(Instr instr, CRegister crd, const MemOperand& x); | 782 void addrmod5(Instr instr, CRegister crd, const MemOperand& x); |
778 | 783 |
779 // Labels | 784 // Labels |
780 void print(Label* L); | 785 void print(Label* L); |
781 void bind_to(Label* L, int pos); | 786 void bind_to(Label* L, int pos); |
782 void link_to(Label* L, Label* appendix); | 787 void link_to(Label* L, Label* appendix); |
783 void next(Label* L); | 788 void next(Label* L); |
784 | 789 |
785 // Record reloc info for current pc_ | 790 // Record reloc info for current pc_ |
786 void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0); | 791 void RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data = 0); |
792 | |
793 friend class RegExpMacroAssemblerARM; | |
787 }; | 794 }; |
788 | 795 |
789 } } // namespace v8::internal | 796 } } // namespace v8::internal |
790 | 797 |
791 #endif // V8_ARM_ASSEMBLER_ARM_H_ | 798 #endif // V8_ARM_ASSEMBLER_ARM_H_ |
OLD | NEW |