assembler: Some r15 fixes
[b43-tools.git] / assembler / parser.y
index e75d9f4d371873ae1d0ab2e7d3f3c757e313ad5f..4ace3307cd8af11e278f300dd13d91e923fcfdf8 100644 (file)
@@ -45,7 +45,7 @@ extern struct initvals_sect *cur_initvals_sect;
 
 %token OP_ADD OP_ADDSC OP_ADDC OP_ADDSCC OP_SUB OP_SUBSC OP_SUBC OP_SUBSCC OP_SRA OP_OR OP_AND OP_XOR OP_SR OP_SRX OP_SL OP_RL OP_RR OP_NAND OP_ORX OP_MOV OP_JMP OP_JAND OP_JNAND OP_JS OP_JNS OP_JE OP_JNE OP_JLS OP_JGES OP_JGS OP_JLES OP_JL OP_JGE OP_JG OP_JLE OP_JZX OP_JNZX OP_JEXT OP_JNEXT OP_CALL OP_RET OP_TKIPH OP_TKIPHS OP_TKIPL OP_TKIPLS OP_NAP RAW_CODE
 
-%token IVAL_MMIO16 IVAL_MMIO32 IVAL_PHY IVAL_RADIO IVAL_SHM16 IVAL_SHM32
+%token IVAL_MMIO16 IVAL_MMIO32 IVAL_PHY IVAL_RADIO IVAL_SHM16 IVAL_SHM32 IVAL_TRAM
 
 %start line
 
@@ -149,6 +149,13 @@ ivals_write        : IVAL_MMIO16 imm_value COMMA imm_value {
                        iop->args[2] = (unsigned int)(unsigned long)$6;
                        $$ = iop;
                  }
+               | IVAL_TRAM imm_value COMMA imm_value {
+                       struct initval_op *iop = xmalloc(sizeof(struct initval_op));
+                       iop->type = IVAL_W_TRAM;
+                       iop->args[0] = (unsigned int)(unsigned long)$2;
+                       iop->args[1] = (unsigned int)(unsigned long)$4;
+                       $$ = iop;
+                 }
                ;
 
 statement      : asmdir {
@@ -516,7 +523,12 @@ asmdir             : ASM_ARCH hexnum_decnum {
                        ad->u.start = label;
                        $$ = ad;
                  }
-               | ASM_ASSERT assertion {
+               | asm_assert {
+                       $$ = NULL;
+                 }
+               ;
+
+asm_assert     : ASM_ASSERT assertion {
                        unsigned int ok = (unsigned int)(unsigned long)$2;
                        if (!ok)
                                assembler_assertion_failed();
@@ -1201,6 +1213,10 @@ complex_imm      : PAREN_OPEN complex_imm_arg complex_imm_oper complex_imm_arg PAREN_
                | PAREN_OPEN complex_imm PAREN_CLOSE {
                        $$ = $2;
                  }
+               | PAREN_OPEN asm_assert PAREN_CLOSE {
+                       /* Inline assertion. Always return zero */
+                       $$ = (void *)(unsigned long)(unsigned int)0;
+                 }
                | PAREN_OPEN BITW_NOT complex_imm PAREN_CLOSE {
                        unsigned long n = (unsigned long)$3;
                        n = ~n;