mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-28 21:45:01 +08:00
fcdfe9d22b
Add ELF-related definition and module relocation code for basic LoongArch support. Cc: Jessica Yu <jeyu@kernel.org> Reviewed-by: WANG Xuerui <git@xen0n.name> Reviewed-by: Luis Chamberlain <mcgrof@kernel.org> Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
41 lines
960 B
C
41 lines
960 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Copyright (C) 2020-2022 Loongson Technology Corporation Limited
|
|
*/
|
|
#include <asm/inst.h>
|
|
|
|
u32 larch_insn_gen_lu32id(enum loongarch_gpr rd, int imm)
|
|
{
|
|
union loongarch_instruction insn;
|
|
|
|
insn.reg1i20_format.opcode = lu32id_op;
|
|
insn.reg1i20_format.rd = rd;
|
|
insn.reg1i20_format.immediate = imm;
|
|
|
|
return insn.word;
|
|
}
|
|
|
|
u32 larch_insn_gen_lu52id(enum loongarch_gpr rd, enum loongarch_gpr rj, int imm)
|
|
{
|
|
union loongarch_instruction insn;
|
|
|
|
insn.reg2i12_format.opcode = lu52id_op;
|
|
insn.reg2i12_format.rd = rd;
|
|
insn.reg2i12_format.rj = rj;
|
|
insn.reg2i12_format.immediate = imm;
|
|
|
|
return insn.word;
|
|
}
|
|
|
|
u32 larch_insn_gen_jirl(enum loongarch_gpr rd, enum loongarch_gpr rj, unsigned long pc, unsigned long dest)
|
|
{
|
|
union loongarch_instruction insn;
|
|
|
|
insn.reg2i16_format.opcode = jirl_op;
|
|
insn.reg2i16_format.rd = rd;
|
|
insn.reg2i16_format.rj = rj;
|
|
insn.reg2i16_format.immediate = (dest - pc) >> 2;
|
|
|
|
return insn.word;
|
|
}
|