diff --git a/tccasm.c b/tccasm.c index 27645a8..6a46417 100644 --- a/tccasm.c +++ b/tccasm.c @@ -368,6 +368,7 @@ static void asm_parse_directive(TCCState *s1) sec = cur_text_section; switch(tok) { case TOK_ASMDIR_align: + case TOK_ASMDIR_balign: case TOK_ASMDIR_p2align: case TOK_ASMDIR_skip: case TOK_ASMDIR_space: @@ -381,7 +382,7 @@ static void asm_parse_directive(TCCState *s1) n = 1 << n; tok1 = TOK_ASMDIR_align; } - if (tok1 == TOK_ASMDIR_align) { + if (tok1 == TOK_ASMDIR_align || tok1 == TOK_ASMDIR_balign) { if (n < 0 || (n & (n-1)) != 0) tcc_error("alignment must be a positive power of two"); offset = (ind + n - 1) & -n; diff --git a/tcctok.h b/tcctok.h index 6e2a041..ec69908 100644 --- a/tcctok.h +++ b/tcctok.h @@ -305,6 +305,7 @@ DEF_ASMDIR(byte) /* must be first directive */ DEF_ASMDIR(word) DEF_ASMDIR(align) + DEF_ASMDIR(balign) DEF_ASMDIR(p2align) DEF_ASMDIR(skip) DEF_ASMDIR(space) diff --git a/tests/asmtest.S b/tests/asmtest.S index f4eb248..eb6305f 100644 --- a/tests/asmtest.S +++ b/tests/asmtest.S @@ -11,6 +11,7 @@ .align 8 .byte 1 /* .align 16, 0x90 gas is too clever for us with 0x90 fill */ + .balign 4, 0x92 .align 16, 0x91 /* 0x91 tests the non-clever behaviour */ .skip 3 .skip 15, 0x90