I was getting those assembler errors for the instruction, br_!signal[start_receive, skip#], guess_branch because I had another macro defined called "signal" :) So that problem is solved... Anyway, but from a quick test, I think that I am still having problems in getting the correct rcv_cntl status without the delay loop before issuing a recieve request. (As described below in the previous mail) Let me check again and confirm. Just mailed in because I did not want people trying to break their head figuring out why "br_!signal" doesnt get assembled in Utah. :) Thanks. - Abhijeet On Wed, 27 Mar 2002, Abhijeet Joglekar wrote:
Thanks Michael.
I looked up the Intel supplied microblocks for SlowIngress and found that before sending out a rcv_request, a macro CONSUME_START_RCV is used.
============================================================================= // This macro will consume a start receive signal, if present. // It is used as a safety net to catch start_receive signals // sent from the IXF440 that we don't expect #macro CONSUME_START_RCV() .local $ignored br_!signal[start_receive, skip#], guess_branch nop csr[read, $ignored, rcv_cntl], ctx_swap skip#: .endlocal #endm =============================================================================
Instead of doing this, I was inserting a delay loop after reading the port status and before sending a rcv_request, since without the delay loop, I get incorrect status in the rcv_cntl register.
============================================================================ get_port_status .if (we_have_a_packet) .local count set [count, 0] .while(count < 0x55) alu [ count, count , + , 1] .endw .endlocal .endif issue_recv_request ============================================================================
This loop is slowing down my input contexts.
So maybe instead of this loop, I need to use the CONSUME_START_RCV macro.
But when I use the instruction, br_!signal[start_receive, skip#], guess_branch
I get the following assembler errors.
ERROR: Invalid text follows macro reference ERROR: Wrong number of arguments for macro : 2 shoule be 1.
Wierd, because the Programmers Reference Manual specifies exactly the same format that I am using above.
Any ideas/pointers?
Also, after taking a look at the Intel SlowIngress microblock, I think my critical sections are a little too large. I will try shrinking them too and see what happens.
- Abhijeet