inst.c 960 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
  4. */
  5. #include <asm/inst.h>
  6. u32 larch_insn_gen_lu32id(enum loongarch_gpr rd, int imm)
  7. {
  8. union loongarch_instruction insn;
  9. insn.reg1i20_format.opcode = lu32id_op;
  10. insn.reg1i20_format.rd = rd;
  11. insn.reg1i20_format.immediate = imm;
  12. return insn.word;
  13. }
  14. u32 larch_insn_gen_lu52id(enum loongarch_gpr rd, enum loongarch_gpr rj, int imm)
  15. {
  16. union loongarch_instruction insn;
  17. insn.reg2i12_format.opcode = lu52id_op;
  18. insn.reg2i12_format.rd = rd;
  19. insn.reg2i12_format.rj = rj;
  20. insn.reg2i12_format.immediate = imm;
  21. return insn.word;
  22. }
  23. u32 larch_insn_gen_jirl(enum loongarch_gpr rd, enum loongarch_gpr rj, unsigned long pc, unsigned long dest)
  24. {
  25. union loongarch_instruction insn;
  26. insn.reg2i16_format.opcode = jirl_op;
  27. insn.reg2i16_format.rd = rd;
  28. insn.reg2i16_format.rj = rj;
  29. insn.reg2i16_format.immediate = (dest - pc) >> 2;
  30. return insn.word;
  31. }