mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
decodetree: Remove "insn" argument from trans_* expanders
This allows trans_* expanders to be shared between decoders for 32 and 16-bit insns, by not tying the expander to the size of the insn that produced it. This change requires adjusting the two existing users to match. Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
@@ -466,8 +466,7 @@ class Pattern(General):
|
||||
output('typedef ', self.base.base.struct_name(),
|
||||
' arg_', self.name, ';\n')
|
||||
output(translate_scope, 'bool ', translate_prefix, '_', self.name,
|
||||
'(DisasContext *ctx, arg_', self.name,
|
||||
' *a, ', insntype, ' insn);\n')
|
||||
'(DisasContext *ctx, arg_', self.name, ' *a);\n')
|
||||
|
||||
def output_code(self, i, extracted, outerbits, outermask):
|
||||
global translate_prefix
|
||||
@@ -479,7 +478,7 @@ class Pattern(General):
|
||||
for n, f in self.fields.items():
|
||||
output(ind, 'u.f_', arg, '.', n, ' = ', f.str_extract(), ';\n')
|
||||
output(ind, 'return ', translate_prefix, '_', self.name,
|
||||
'(ctx, &u.f_', arg, ', insn);\n')
|
||||
'(ctx, &u.f_', arg, ');\n')
|
||||
# end Pattern
|
||||
|
||||
|
||||
|
||||
+244
-263
File diff suppressed because it is too large
Load Diff
+11
-12
@@ -51,12 +51,11 @@ int print_insn_or1k(bfd_vma addr, disassemble_info *info)
|
||||
return 4;
|
||||
}
|
||||
|
||||
#define INSN(opcode, format, ...) \
|
||||
static bool trans_l_##opcode(disassemble_info *info, \
|
||||
arg_l_##opcode *a, uint32_t insn) \
|
||||
{ \
|
||||
output("l." #opcode, format, ##__VA_ARGS__); \
|
||||
return true; \
|
||||
#define INSN(opcode, format, ...) \
|
||||
static bool trans_l_##opcode(disassemble_info *info, arg_l_##opcode *a) \
|
||||
{ \
|
||||
output("l." #opcode, format, ##__VA_ARGS__); \
|
||||
return true; \
|
||||
}
|
||||
|
||||
INSN(add, "r%d, r%d, r%d", a->d, a->a, a->b)
|
||||
@@ -146,12 +145,12 @@ INSN(psync, "")
|
||||
INSN(csync, "")
|
||||
INSN(rfe, "")
|
||||
|
||||
#define FP_INSN(opcode, suffix, format, ...) \
|
||||
static bool trans_lf_##opcode##_##suffix(disassemble_info *info, \
|
||||
arg_lf_##opcode##_##suffix *a, uint32_t insn) \
|
||||
{ \
|
||||
output("lf." #opcode "." #suffix, format, ##__VA_ARGS__); \
|
||||
return true; \
|
||||
#define FP_INSN(opcode, suffix, format, ...) \
|
||||
static bool trans_lf_##opcode##_##suffix(disassemble_info *info, \
|
||||
arg_lf_##opcode##_##suffix *a) \
|
||||
{ \
|
||||
output("lf." #opcode "." #suffix, format, ##__VA_ARGS__); \
|
||||
return true; \
|
||||
}
|
||||
|
||||
FP_INSN(add, s, "r%d, r%d, r%d", a->d, a->a, a->b)
|
||||
|
||||
+100
-100
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user