瀏覽代碼

microblaze: Fix unaligned issue on MMU system with BS=0 DIV=1

Unaligned code use shift for finding register operand.
There is used BSRLI(r8,r8,2) macro which is expand for BS=0, DIV=1
by
	ori rD, r0, (1 << imm);	\
	idivu rD, rD, rA

but if rD is equal rA then ori instruction rewrite value which
should be devide.

The patch remove this macro which use idivu instruction because
idivu takes 32/34 cycles. The highest shifting is 20 which takes
20 cycles.

Signed-off-by: Michal Simek <monstr@monstr.eu>
Michal Simek 14 年之前
父節點
當前提交
9c749e177c
共有 1 個文件被更改,包括 0 次插入4 次删除
  1. 0 4
      arch/microblaze/kernel/hw_exception_handler.S

+ 0 - 4
arch/microblaze/kernel/hw_exception_handler.S

@@ -147,10 +147,6 @@
 	#if CONFIG_XILINX_MICROBLAZE0_USE_BARREL > 0
 	#if CONFIG_XILINX_MICROBLAZE0_USE_BARREL > 0
 	#define BSRLI(rD, rA, imm)	\
 	#define BSRLI(rD, rA, imm)	\
 		bsrli rD, rA, imm
 		bsrli rD, rA, imm
-	#elif CONFIG_XILINX_MICROBLAZE0_USE_DIV > 0
-	#define BSRLI(rD, rA, imm)	\
-		ori rD, r0, (1 << imm);	\
-		idivu rD, rD, rA
 	#else
 	#else
 	#define BSRLI(rD, rA, imm) BSRLI ## imm (rD, rA)
 	#define BSRLI(rD, rA, imm) BSRLI ## imm (rD, rA)
 	/* Only the used shift constants defined here - add more if needed */
 	/* Only the used shift constants defined here - add more if needed */