target/hppa: Fix assemble_11a insns for wide mode
Tested-by: Helge Deller <deller@gmx.de> Reviewed-by: Helge Deller <deller@gmx.de> Reported-by: Sven Schnelle <svens@stackframe.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
72bace2d13
commit
4768c28edd
@ -24,7 +24,7 @@
|
||||
%assemble_sr3 13:1 14:2
|
||||
%assemble_sr3x 13:1 14:2 !function=expand_sr3x
|
||||
|
||||
%assemble_11a 0:s1 4:10 !function=expand_shl3
|
||||
%assemble_11a 4:12 0:1 !function=expand_11a
|
||||
%assemble_12 0:s1 2:1 3:10 !function=expand_shl2
|
||||
%assemble_12a 0:s1 3:11 !function=expand_shl2
|
||||
%assemble_16 0:16 !function=expand_16
|
||||
@ -305,8 +305,9 @@ fstd 001011 ..... ..... .. . 1 -- 100 0 . ..... @fldstdi
|
||||
# Offset Mem
|
||||
####
|
||||
|
||||
@ldstim11 ...... b:5 t:5 sp:2 .............. \
|
||||
&ldst disp=%assemble_11a m=%ma2_to_m x=0 scale=0 size=3
|
||||
@ldstim11 ...... b:5 t:5 ................ \
|
||||
&ldst sp=%assemble_sp disp=%assemble_11a \
|
||||
m=%ma2_to_m x=0 scale=0 size=3
|
||||
@ldstim14 ...... b:5 t:5 ................ \
|
||||
&ldst sp=%assemble_sp disp=%assemble_16 \
|
||||
x=0 scale=0 m=0
|
||||
|
@ -121,12 +121,6 @@ static int expand_shl2(DisasContext *ctx, int val)
|
||||
return val << 2;
|
||||
}
|
||||
|
||||
/* Used for fp memory ops. */
|
||||
static int expand_shl3(DisasContext *ctx, int val)
|
||||
{
|
||||
return val << 3;
|
||||
}
|
||||
|
||||
/* Used for assemble_21. */
|
||||
static int expand_shl11(DisasContext *ctx, int val)
|
||||
{
|
||||
@ -144,6 +138,23 @@ static int assemble_6(DisasContext *ctx, int val)
|
||||
return (val ^ 31) + 1;
|
||||
}
|
||||
|
||||
/* Expander for assemble_16a(s,cat(im10a,0),i). */
|
||||
static int expand_11a(DisasContext *ctx, int val)
|
||||
{
|
||||
/*
|
||||
* @val is bit 0 and bits [4:15].
|
||||
* Swizzle thing around depending on PSW.W.
|
||||
*/
|
||||
int im10a = extract32(val, 1, 10);
|
||||
int s = extract32(val, 11, 2);
|
||||
int i = (-(val & 1) << 13) | (im10a << 3);
|
||||
|
||||
if (ctx->tb_flags & PSW_W) {
|
||||
i ^= s << 13;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
/* Expander for assemble_16(s,im14). */
|
||||
static int expand_16(DisasContext *ctx, int val)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user