Unified · Split
| @@ -335,11 +335,19 @@ static void asm_parse_directive(TCCState *s1) · 334 unmodified lines | ||
| 335 | 335 | sec = cur_text_section; |
| 336 | 336 | switch(tok) { |
| 337 | 337 | case TOK_ASM_align: |
| 338 | + case TOK_ASM_p2align: | |
| 338 | 339 | case TOK_ASM_skip: |
| 339 | 340 | case TOK_ASM_space: |
| 340 | 341 | tok1 = tok; |
| 341 | 342 | next(); |
| 342 | 343 | n = asm_int_expr(s1); |
| 344 | + if (tok1 == TOK_ASM_p2align) | |
| 345 | + { | |
| 346 | + if (n < 0 || n > 30) | |
| 347 | + tcc_error("invalid p2align, must be between 0 and 30"); | |
| 348 | + n = 1 << n; | |
| 349 | + tok1 = TOK_ASM_align; | |
| 350 | + } | |
| 343 | 351 | if (tok1 == TOK_ASM_align) { |
| 344 | 352 | if (n < 0 || (n & (n-1)) != 0) |
| 345 | 353 | tcc_error("alignment must be a positive power of two"); |
| @@ -258,6 +258,7 @@ · 257 unmodified lines | ||
| 258 | 258 | DEF_ASM(byte) |
| 259 | 259 | DEF_ASM(word) |
| 260 | 260 | DEF_ASM(align) |
| 261 | + DEF_ASM(p2align) | |
| 261 | 262 | DEF_ASM(skip) |
| 262 | 263 | DEF_ASM(space) |
| 263 | 264 | DEF_ASM(string) |