[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
MIPS questions
- Date: Fri, 24 Oct 2003 14:18:02 -0400 (EDT)
- From: gregory.menke at gsfc.nasa.gov (gregory.menke at gsfc.nasa.gov)
- Subject: MIPS questions
Jay Monkman writes:
> I'm working on a MIPS BSP, and have a couple questions.
>
> Does anybody have TCP/IP working? Unless I make changes, I get
> alignment errors. During processing, the stack overlays the TCP source
> and dest port numbers with the address of the mbuf. Since there's no
> guarantee those stay aligned, how is TCP working on MIPS? It looks
> like the fixes we put in for ARM will fix this also.
Could you be more specific here? What driver are you using, where is
the alignment error happening, etc...
>
> In _CPU_ISR_Set_level in cpukit/score/cpu/mips/cpu.c, there's a chunk
> of code:
> sr = srbits | ((new_level==0)? (0xfc00 | SR_EXL | SR_IE): \
> (((new_level<<9) & 0xfc00) | \
> (new_level & 1)?(SR_EXL | SR_IE):0));
>
> I think there needs to be parentheses around the last line. Without
> the parentheses, the statement turns into:
> sr = srbits | ((new_level==0)? (0xfc00 | SR_EXL | SR_IE): \
> (SR_EXL | SR_IE));
>
> Or am I missing something?
I think you're missing something, the false term of the first ?: is in
parens. The 9 bit rightshift and mask yields a constant or'ed into
the expression. The 2nd ?: tests for 1, which if false yields 0
else the (SR_EXL | SR_IE). But it is kind of messy and extra parens
would be helpful.
Gregm
- Follow-Ups:
- MIPS questions
- From: jtm-list-rtems at smoothsmoothie.com (Jay Monkman)