mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-06 05:06:29 +00:00
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: Jinyang He <hejinyang@loongson.cn> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
This commit is contained in:
parent
d52fec86a4
commit
2959fce7fd
@ -377,14 +377,6 @@ static inline bool unsigned_imm_check(unsigned long val, unsigned int 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) \
|
||||
static inline void emit_##NAME(union loongarch_instruction *insn, \
|
||||
int offset) \
|
||||
|
@ -74,7 +74,7 @@ static void __init_or_module recompute_jump(union loongarch_instruction *buf,
|
||||
switch (src->reg0i26_format.opcode) {
|
||||
case b_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))
|
||||
return;
|
||||
offset = jump_addr - pc;
|
||||
@ -93,7 +93,7 @@ static void __init_or_module recompute_jump(union loongarch_instruction *buf,
|
||||
fallthrough;
|
||||
case beqz_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))
|
||||
return;
|
||||
offset = jump_addr - pc;
|
||||
@ -112,7 +112,7 @@ static void __init_or_module recompute_jump(union loongarch_instruction *buf,
|
||||
case bge_op:
|
||||
case bltu_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))
|
||||
return;
|
||||
offset = jump_addr - pc;
|
||||
|
Loading…
Reference in New Issue
Block a user