Commit 2959fce7 authored by Tiezhu Yang's avatar Tiezhu Yang Committed by Huacai Chen

LoongArch: Use common function sign_extend64()

There exists a common function sign_extend64() to sign extend a 64-bit
value using specified bit as sign-bit in include/linux/bitops.h, it is
more efficient, let us use it and remove the arch-specific sign_extend()
under arch/loongarch.
Suggested-by: default avatarJinyang He <hejinyang@loongson.cn>
Signed-off-by: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
parent d52fec86
...@@ -377,14 +377,6 @@ static inline bool unsigned_imm_check(unsigned long val, unsigned int bit) ...@@ -377,14 +377,6 @@ static inline bool unsigned_imm_check(unsigned long val, unsigned int bit)
return val < (1UL << bit); return val < (1UL << bit);
} }
static inline unsigned long sign_extend(unsigned long val, unsigned int idx)
{
if (!is_imm_negative(val, idx + 1))
return ((1UL << idx) - 1) & val;
else
return ~((1UL << idx) - 1) | val;
}
#define DEF_EMIT_REG0I26_FORMAT(NAME, OP) \ #define DEF_EMIT_REG0I26_FORMAT(NAME, OP) \
static inline void emit_##NAME(union loongarch_instruction *insn, \ static inline void emit_##NAME(union loongarch_instruction *insn, \
int offset) \ int offset) \
......
...@@ -74,7 +74,7 @@ static void __init_or_module recompute_jump(union loongarch_instruction *buf, ...@@ -74,7 +74,7 @@ static void __init_or_module recompute_jump(union loongarch_instruction *buf,
switch (src->reg0i26_format.opcode) { switch (src->reg0i26_format.opcode) {
case b_op: case b_op:
case bl_op: case bl_op:
jump_addr = cur_pc + sign_extend((si_h << 16 | si_l) << 2, 27); jump_addr = cur_pc + sign_extend64((si_h << 16 | si_l) << 2, 27);
if (in_alt_jump(jump_addr, start, end)) if (in_alt_jump(jump_addr, start, end))
return; return;
offset = jump_addr - pc; offset = jump_addr - pc;
...@@ -93,7 +93,7 @@ static void __init_or_module recompute_jump(union loongarch_instruction *buf, ...@@ -93,7 +93,7 @@ static void __init_or_module recompute_jump(union loongarch_instruction *buf,
fallthrough; fallthrough;
case beqz_op: case beqz_op:
case bnez_op: case bnez_op:
jump_addr = cur_pc + sign_extend((si_h << 16 | si_l) << 2, 22); jump_addr = cur_pc + sign_extend64((si_h << 16 | si_l) << 2, 22);
if (in_alt_jump(jump_addr, start, end)) if (in_alt_jump(jump_addr, start, end))
return; return;
offset = jump_addr - pc; offset = jump_addr - pc;
...@@ -112,7 +112,7 @@ static void __init_or_module recompute_jump(union loongarch_instruction *buf, ...@@ -112,7 +112,7 @@ static void __init_or_module recompute_jump(union loongarch_instruction *buf,
case bge_op: case bge_op:
case bltu_op: case bltu_op:
case bgeu_op: case bgeu_op:
jump_addr = cur_pc + sign_extend(si << 2, 17); jump_addr = cur_pc + sign_extend64(si << 2, 17);
if (in_alt_jump(jump_addr, start, end)) if (in_alt_jump(jump_addr, start, end))
return; return;
offset = jump_addr - pc; offset = jump_addr - pc;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment