target/hppa: Decode CMPIB double-word

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2023-09-16 22:06:04 -07:00
parent e9efd4bcdc
commit c65c3ee16b
2 changed files with 18 additions and 3 deletions

View File

@ -51,6 +51,7 @@
%pos_to_m 0:1 !function=pos_to_m
%neg_to_m 0:1 !function=neg_to_m
%a_to_m 2:1 !function=neg_to_m
%cmpbid_c 13:2 !function=cmpbid_c
####
# Argument set definitions
@ -69,6 +70,7 @@
&rrb_c_f disp n c f r1 r2
&rrb_c_d_f disp n c d f r1 r2
&rib_c_f disp n c f r i
&rib_c_d_f disp n c d f r i
####
# Format definitions
@ -88,6 +90,8 @@
&rrb_c_d_f disp=%assemble_12
@rib_cf ...... r:5 ..... c:3 ........... n:1 . \
&rib_c_f disp=%assemble_12 i=%im5_16
@rib_cdf ...... r:5 ..... c:3 ........... n:1 . \
&rib_c_d_f disp=%assemble_12 i=%im5_16
####
# System
@ -303,8 +307,10 @@ cmpb 100000 ..... ..... ... ........... . . @rrb_cdf d=0 f=0
cmpb 100010 ..... ..... ... ........... . . @rrb_cdf d=0 f=1
cmpb 100111 ..... ..... ... ........... . . @rrb_cdf d=1 f=0
cmpb 101111 ..... ..... ... ........... . . @rrb_cdf d=1 f=1
cmpbi 100001 ..... ..... ... ........... . . @rib_cf f=0
cmpbi 100011 ..... ..... ... ........... . . @rib_cf f=1
cmpbi 100001 ..... ..... ... ........... . . @rib_cdf d=0 f=0
cmpbi 100011 ..... ..... ... ........... . . @rib_cdf d=0 f=1
cmpbi 111011 r:5 ..... f:1 .. ........... n:1 . \
&rib_c_d_f d=1 disp=%assemble_12 c=%cmpbid_c i=%im5_16
addb 101000 ..... ..... ... ........... . . @rrb_cf f=0
addb 101010 ..... ..... ... ........... . . @rrb_cf f=1

View File

@ -329,6 +329,12 @@ static int expand_shl11(DisasContext *ctx, int val)
return val << 11;
}
/* Translate CMPI doubleword conditions to standard. */
static int cmpbid_c(DisasContext *ctx, int val)
{
return val ? val : 4; /* 0 == "*<<" */
}
/* Include the auto-generated decoder. */
#include "decode-insns.c.inc"
@ -3122,9 +3128,12 @@ static bool trans_cmpb(DisasContext *ctx, arg_cmpb *a)
static bool trans_cmpbi(DisasContext *ctx, arg_cmpbi *a)
{
if (!ctx->is_pa20 && a->d) {
return false;
}
nullify_over(ctx);
return do_cmpb(ctx, a->r, tcg_constant_reg(a->i),
a->c, a->f, false, a->n, a->disp);
a->c, a->f, a->d, a->n, a->disp);
}
static bool do_addb(DisasContext *ctx, unsigned r, TCGv_reg in1,