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

Side by Side Diff: src/assembler.h

Issue 8961: Merge change list off bleeding_edge into toiger branch. (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/toiger/
Patch Set: Created 12 years, 1 month 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/ast.h » ('j') | no next file with comments »
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 are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // 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 30 matching lines...) Expand all
41 41
42 namespace v8 { namespace internal { 42 namespace v8 { namespace internal {
43 43
44 44
45 // ----------------------------------------------------------------------------- 45 // -----------------------------------------------------------------------------
46 // Labels represent pc locations; they are typically jump or call targets. 46 // Labels represent pc locations; they are typically jump or call targets.
47 // After declaration, a label can be freely used to denote known or (yet) 47 // After declaration, a label can be freely used to denote known or (yet)
48 // unknown pc location. Assembler::bind() is used to bind a label to the 48 // unknown pc location. Assembler::bind() is used to bind a label to the
49 // current pc. A label can be bound only once. 49 // current pc. A label can be bound only once.
50 50
51 class Label : public ZoneObject { // LabelShadows are dynamically allocated. 51 class Label BASE_EMBEDDED {
52 public: 52 public:
53 INLINE(Label()) { Unuse(); } 53 INLINE(Label()) { Unuse(); }
54 INLINE(~Label()) { ASSERT(!is_linked()); } 54 INLINE(~Label()) { ASSERT(!is_linked()); }
55 55
56 INLINE(void Unuse()) { pos_ = 0; } 56 INLINE(void Unuse()) { pos_ = 0; }
57 57
58 INLINE(bool is_bound() const) { return pos_ < 0; } 58 INLINE(bool is_bound() const) { return pos_ < 0; }
59 INLINE(bool is_unused() const) { return pos_ == 0; } 59 INLINE(bool is_unused() const) { return pos_ == 0; }
60 INLINE(bool is_linked() const) { return pos_ > 0; } 60 INLINE(bool is_linked() const) { return pos_ > 0; }
61 61
(...skipping 14 matching lines...) Expand all
76 pos_ = -pos - 1; 76 pos_ = -pos - 1;
77 ASSERT(is_bound()); 77 ASSERT(is_bound());
78 } 78 }
79 void link_to(int pos) { 79 void link_to(int pos) {
80 pos_ = pos + 1; 80 pos_ = pos + 1;
81 ASSERT(is_linked()); 81 ASSERT(is_linked());
82 } 82 }
83 83
84 friend class Assembler; 84 friend class Assembler;
85 friend class Displacement; 85 friend class Displacement;
86 friend class LabelShadow; 86 friend class ShadowTarget;
87 };
88
89
90 // A LabelShadow represents a label that is temporarily shadowed by another
91 // label (represented by the original label during shadowing). They are used
92 // to catch jumps to labels in certain contexts, e.g. try blocks. After
93 // shadowing ends, the formerly shadowed label is again represented by the
94 // original label and the LabelShadow can be used as a label in its own
95 // right, representing the formerly shadowing label.
96 class LabelShadow : public Label {
97 public:
98 explicit LabelShadow(Label* original) {
99 ASSERT(original != NULL);
100 original_label_ = original;
101 original_pos_ = original->pos_;
102 original->Unuse();
103 #ifdef DEBUG
104 is_shadowing_ = true;
105 #endif
106 }
107
108 ~LabelShadow() {
109 ASSERT(!is_shadowing_);
110 }
111
112 void StopShadowing() {
113 ASSERT(is_shadowing_ && is_unused());
114 pos_ = original_label_->pos_;
115 original_label_->pos_ = original_pos_;
116 #ifdef DEBUG
117 is_shadowing_ = false;
118 #endif
119 }
120
121 Label* original_label() const { return original_label_; }
122
123 private:
124 // During shadowing, the currently shadowing label. After shadowing, the
125 // label that was shadowed.
126 Label* original_label_;
127
128 // During shadowing, the saved state of the original label.
129 int original_pos_;
130
131 #ifdef DEBUG
132 bool is_shadowing_;
133 #endif
134 }; 87 };
135 88
136 89
137 // ----------------------------------------------------------------------------- 90 // -----------------------------------------------------------------------------
138 // Relocation information 91 // Relocation information
139 92
140 93
141 // Relocation information consists of the address (pc) of the datum 94 // Relocation information consists of the address (pc) of the datum
142 // to which the relocation information applies, the relocation mode 95 // to which the relocation information applies, the relocation mode
143 // (rmode), and an optional data field. The relocation mode may be 96 // (rmode), and an optional data field. The relocation mode may be
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 static inline bool is_uint4(int x) { return is_uintn(x, 4); } 421 static inline bool is_uint4(int x) { return is_uintn(x, 4); }
469 static inline bool is_uint5(int x) { return is_uintn(x, 5); } 422 static inline bool is_uint5(int x) { return is_uintn(x, 5); }
470 static inline bool is_uint8(int x) { return is_uintn(x, 8); } 423 static inline bool is_uint8(int x) { return is_uintn(x, 8); }
471 static inline bool is_uint12(int x) { return is_uintn(x, 12); } 424 static inline bool is_uint12(int x) { return is_uintn(x, 12); }
472 static inline bool is_uint16(int x) { return is_uintn(x, 16); } 425 static inline bool is_uint16(int x) { return is_uintn(x, 16); }
473 static inline bool is_uint24(int x) { return is_uintn(x, 24); } 426 static inline bool is_uint24(int x) { return is_uintn(x, 24); }
474 427
475 } } // namespace v8::internal 428 } } // namespace v8::internal
476 429
477 #endif // V8_ASSEMBLER_H_ 430 #endif // V8_ASSEMBLER_H_
OLDNEW
« no previous file with comments | « no previous file | src/ast.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698