b43-asm: Allow terminating lines with |
authorMichael Buesch <mb@bu3sch.de>
Sat, 26 Jan 2008 00:03:47 +0000 (01:03 +0100)
committerMichael Buesch <mb@bu3sch.de>
Sat, 26 Jan 2008 00:03:47 +0000 (01:03 +0100)
This improves macro handling

Signed-off-by: Michael Buesch <mb@bu3sch.de>
assembler/parser.y
assembler/scanner.l
assembler/test.asm

index e55c2b7734617c88d26d2c6e92bc44972d42f1f1..f00b2da4dec31266d2e64b6e6599514525ace4e8 100644 (file)
@@ -50,17 +50,19 @@ extern struct initvals_sect *cur_initvals_sect;
 
 %%
 
-line   : /* empty */
-       | line statement {
+line   : line_terminator {
+               /* empty */
+         }
+       | line statement line_terminator {
                struct statement *s = $2;
                if (section != SECTION_TEXT)
                        yyerror("Microcode text instruction in non .text section");
                memcpy(&s->info, &cur_lineinfo, sizeof(struct lineinfo));
                list_add_tail(&s->list, &infile.sl);
          }
-       | line section_switch {
+       | line section_switch line_terminator {
          }
-       | line ivals_write {
+       | line ivals_write line_terminator {
                struct initval_op *io = $2;
                if (section != SECTION_IVALS)
                        yyerror("InitVals write in non .initvals section");
@@ -70,6 +72,10 @@ line : /* empty */
          }
        ;
 
+/* Allow terminating lines with the "|" char */
+line_terminator : /* Nothing */
+               | BITW_OR line_terminator
+
 section_switch : SECTION_TEXT {
                        section = SECTION_TEXT;
                  }
index 346cbe6c1d81bbe402f279bdf73ab09164898b41..1fa83d564b7e95183da999039edecb5b15ba954c 100644 (file)
@@ -53,8 +53,8 @@ NEWLINE               ((\r)|(\n)|(\r\n))
 ^{WS}*"%"{WS}*arch     { update_lineinfo(); return ASM_ARCH; }
 ^{WS}*"%"{WS}*start    { update_lineinfo(); return ASM_START; }
 
-^{WS}*\.text{WS}*$                             { update_lineinfo(); return SECTION_TEXT; }
-^{WS}*\.initvals/\({IDENTIFIER}\){WS}*{NEWLINE}        { update_lineinfo(); return SECTION_IVALS; }
+^{WS}*\.text{WS}*$                     { update_lineinfo(); return SECTION_TEXT; }
+^{WS}*\.initvals/\({IDENTIFIER}\)      { update_lineinfo(); return SECTION_IVALS; }
 
 spr[0-9a-fA-F]{3,3}    { update_lineinfo(); return SPR; }
 r/([0-9]|([1-5][0-9])|(6[0-3]))        { update_lineinfo(); return GPR; }
index bfd3a08a9e8f7a4406c62619b15f9d393e775d23..8f78893f4d40089d690f94853b9b4cdfbbc8c288 100644 (file)
@@ -163,6 +163,7 @@ function_b:
        or      spr06c,0,spr06c         ; Can have one spr input and one spr output
        or      [0],0,[0]               ; Can have one mem input and one mem output
        mov     testlabel, r0           ; Can use label as immediate value
+       mov r0,r1|mov r2, r3            ; | does also seperate instructions
 
 
 ; The .initvals section generates an "Initial Values" file