On 9/20/21 10:04, WANG Xuerui wrote:
Signed-off-by: WANG Xuerui <[email protected]>
---
tcg/loongarch/tcg-insn-defs.c.inc | 1080 +++++++++++++++++++++++++++++
1 file changed, 1080 insertions(+)
create mode 100644 tcg/loongarch/tcg-insn-defs.c.inc
+static int32_t encode_dj_slots(LoongArchInsn opc, uint32_t d, uint32_t j)
+{
Can we move the range check to the callee and avoid masking the values
in the caller?
tcg_debug_assert(d < 0x20);
tcg_debug_assert(j < 0x20);
+ return opc | d | j << 5;
+}
+
+static int32_t encode_djk_slots(LoongArchInsn opc, uint32_t d, uint32_t j,
+ uint32_t k) __attribute__((unused));
+
+static int32_t encode_djk_slots(LoongArchInsn opc, uint32_t d, uint32_t j,
+ uint32_t k)
+{
tcg_debug_assert(d < 0x20);
tcg_debug_assert(j < 0x20);
+ return opc | d | j << 5 | k << 10;
+}
+
+static int32_t encode_djkm_slots(LoongArchInsn opc, uint32_t d, uint32_t j,
+ uint32_t k, uint32_t m)
+ __attribute__((unused));
+
+static int32_t encode_djkm_slots(LoongArchInsn opc, uint32_t d, uint32_t j,
+ uint32_t k, uint32_t m)
+{
+ return opc | d | j << 5 | k << 10 | m << 16;
+}
+
+static int32_t encode_dk_slots(LoongArchInsn opc, uint32_t d, uint32_t k)
+ __attribute__((unused));
+
+static int32_t encode_dk_slots(LoongArchInsn opc, uint32_t d, uint32_t k)
+{
+ return opc | d | k << 10;
+}
+
+static int32_t encode_dj_insn(LoongArchInsn opc, TCGReg d, TCGReg j)
+ __attribute__((unused));
+
+static int32_t encode_dj_insn(LoongArchInsn opc, TCGReg d, TCGReg j)
+{
+ d &= 0x1f;
+ j &= 0x1f;
+ return encode_dj_slots(opc, d, j);
+}
+
+static int32_t encode_djk_insn(LoongArchInsn opc, TCGReg d, TCGReg j, TCGReg k)
+ __attribute__((unused));
+
+static int32_t encode_djk_insn(LoongArchInsn opc, TCGReg d, TCGReg j, TCGReg k)
+{
+ d &= 0x1f;
+ j &= 0x1f;
^ moved to encode_djk_slots()
+ k &= 0x1f;
tcg_debug_assert(k < 0x20);
+ return encode_djk_slots(opc, d, j, k);
+}
+
+static int32_t encode_djsk12_insn(LoongArchInsn opc, TCGReg d, TCGReg j,
+ int32_t sk12) __attribute__((unused));
+
+static int32_t encode_djsk12_insn(LoongArchInsn opc, TCGReg d, TCGReg j,
+ int32_t sk12)
+{
+ d &= 0x1f;
+ j &= 0x1f;
^ moved to encode_djk_slots()
+ sk12 &= 0xfff;
tcg_debug_assert(sk12 < 0x1000);
+ return encode_djk_slots(opc, d, j, sk12);
+}
+
+static int32_t encode_djsk16_insn(LoongArchInsn opc, TCGReg d, TCGReg j,
+ int32_t sk16) __attribute__((unused));
+
+static int32_t encode_djsk16_insn(LoongArchInsn opc, TCGReg d, TCGReg j,
+ int32_t sk16)
+{
+ d &= 0x1f;
+ j &= 0x1f;
^ moved to encode_djk_slots()
+ sk16 &= 0xffff;
tcg_debug_assert(sk16 < 0x10000);
+ return encode_djk_slots(opc, d, j, sk16);
+}
etc...