254 // save end pointer back to code buf. |
254 // save end pointer back to code buf. |
255 void sync(); |
255 void sync(); |
256 |
256 |
257 // ensure buf contains all code (call this before using/copying the code) |
257 // ensure buf contains all code (call this before using/copying the code) |
258 void flush(); |
258 void flush(); |
|
259 |
|
260 // min and max values for signed immediate ranges |
|
261 static int min_simm(int nbits) { return -(intptr_t(1) << (nbits - 1)) ; } |
|
262 static int max_simm(int nbits) { return (intptr_t(1) << (nbits - 1)) - 1; } |
|
263 |
|
264 // Define some: |
|
265 static int min_simm10() { return min_simm(10); } |
|
266 static int min_simm13() { return min_simm(13); } |
|
267 static int min_simm16() { return min_simm(16); } |
|
268 |
|
269 // Test if x is within signed immediate range for nbits |
|
270 static bool is_simm(intptr_t x, int nbits) { return min_simm(nbits) <= x && x <= max_simm(nbits); } |
|
271 |
|
272 // Define some: |
|
273 static bool is_simm5( intptr_t x) { return is_simm(x, 5 ); } |
|
274 static bool is_simm8( intptr_t x) { return is_simm(x, 8 ); } |
|
275 static bool is_simm10(intptr_t x) { return is_simm(x, 10); } |
|
276 static bool is_simm11(intptr_t x) { return is_simm(x, 11); } |
|
277 static bool is_simm12(intptr_t x) { return is_simm(x, 12); } |
|
278 static bool is_simm13(intptr_t x) { return is_simm(x, 13); } |
|
279 static bool is_simm16(intptr_t x) { return is_simm(x, 16); } |
|
280 static bool is_simm26(intptr_t x) { return is_simm(x, 26); } |
|
281 static bool is_simm32(intptr_t x) { return is_simm(x, 32); } |
259 |
282 |
260 // Accessors |
283 // Accessors |
261 CodeBuffer* code() const; // _code_section->outer() |
284 CodeBuffer* code() const; // _code_section->outer() |
262 CodeSection* code_section() const { return _code_section; } |
285 CodeSection* code_section() const { return _code_section; } |
263 int sect() const; // return _code_section->index() |
286 int sect() const; // return _code_section->index() |