diff --git a/tccasm.c b/tccasm.c index 38efe1c..d9c929c 100644 --- a/tccasm.c +++ b/tccasm.c @@ -335,11 +335,19 @@ static void asm_parse_directive(TCCState *s1) sec = cur_text_section; switch(tok) { case TOK_ASM_align: + case TOK_ASM_p2align: case TOK_ASM_skip: case TOK_ASM_space: tok1 = tok; next(); n = asm_int_expr(s1); + if (tok1 == TOK_ASM_p2align) + { + if (n < 0 || n > 30) + tcc_error("invalid p2align, must be between 0 and 30"); + n = 1 << n; + tok1 = TOK_ASM_align; + } if (tok1 == TOK_ASM_align) { if (n < 0 || (n & (n-1)) != 0) tcc_error("alignment must be a positive power of two"); diff --git a/tcctok.h b/tcctok.h index 735ccdd..53d0659 100644 --- a/tcctok.h +++ b/tcctok.h @@ -258,6 +258,7 @@ DEF_ASM(byte) DEF_ASM(word) DEF_ASM(align) + DEF_ASM(p2align) DEF_ASM(skip) DEF_ASM(space) DEF_ASM(string)