Skip to content

Commit

Permalink
MIPS: R2: Try to bulletproof instruction_hazard against miss-compilat…
Browse files Browse the repository at this point in the history
…ion.

    
Gcc has a tradition of misscompiling the previous construct using the
address of a label as argument to inline assembler.  Gas otoh has the
annoying difference between la and dla which are only usable for 32-bit
rsp. 64-bit code, so can't be used without conditional compilation.
The alterantive is switching the assembler to 64-bit code which happens
to work right even for 32-bit code ...
    
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
  • Loading branch information
Ralf Baechle authored and Unknown committed Jan 10, 2006
1 parent 1526525 commit 7043ad4
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions include/asm-mips/hazards.h
Original file line number Diff line number Diff line change
Expand Up @@ -233,15 +233,25 @@ __asm__(
#endif

#ifdef CONFIG_CPU_MIPSR2
/*
* gcc has a tradition of misscompiling the previous construct using the
* address of a label as argument to inline assembler. Gas otoh has the
* annoying difference between la and dla which are only usable for 32-bit
* rsp. 64-bit code, so can't be used without conditional compilation.
* The alterantive is switching the assembler to 64-bit code which happens
* to work right even for 32-bit code ...
*/
#define instruction_hazard() \
do { \
__label__ __next; \
unsigned long tmp; \
\
__asm__ __volatile__( \
" .set mips64r2 \n" \
" dla %0, 1f \n" \
" jr.hb %0 \n" \
: \
: "r" (&&__next)); \
__next: \
; \
" .set mips0 \n" \
"1: \n" \
: "=r" (tmp)); \
} while (0)

#else
Expand Down

0 comments on commit 7043ad4

Please sign in to comment.