Revert "target-arm: Use global env in iwmmxt_helper.c helpers"
This reverts commit 947a2fa21b
,
returning the iwmmxt helpers to passing env in as a parameter.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
48e2faf222
commit
477955bd55
@ -375,47 +375,47 @@ DEF_HELPER_2(iwmmxt_macsw, i64, i64, i64)
|
|||||||
DEF_HELPER_2(iwmmxt_macuw, i64, i64, i64)
|
DEF_HELPER_2(iwmmxt_macuw, i64, i64, i64)
|
||||||
DEF_HELPER_1(iwmmxt_setpsr_nz, i32, i64)
|
DEF_HELPER_1(iwmmxt_setpsr_nz, i32, i64)
|
||||||
|
|
||||||
#define DEF_IWMMXT_HELPER_SIZE(name) \
|
#define DEF_IWMMXT_HELPER_SIZE_ENV(name) \
|
||||||
DEF_HELPER_2(iwmmxt_##name##b, i64, i64, i64) \
|
DEF_HELPER_3(iwmmxt_##name##b, i64, env, i64, i64) \
|
||||||
DEF_HELPER_2(iwmmxt_##name##w, i64, i64, i64) \
|
DEF_HELPER_3(iwmmxt_##name##w, i64, env, i64, i64) \
|
||||||
DEF_HELPER_2(iwmmxt_##name##l, i64, i64, i64) \
|
DEF_HELPER_3(iwmmxt_##name##l, i64, env, i64, i64) \
|
||||||
|
|
||||||
DEF_IWMMXT_HELPER_SIZE(unpackl)
|
DEF_IWMMXT_HELPER_SIZE_ENV(unpackl)
|
||||||
DEF_IWMMXT_HELPER_SIZE(unpackh)
|
DEF_IWMMXT_HELPER_SIZE_ENV(unpackh)
|
||||||
|
|
||||||
DEF_HELPER_1(iwmmxt_unpacklub, i64, i64)
|
DEF_HELPER_2(iwmmxt_unpacklub, i64, env, i64)
|
||||||
DEF_HELPER_1(iwmmxt_unpackluw, i64, i64)
|
DEF_HELPER_2(iwmmxt_unpackluw, i64, env, i64)
|
||||||
DEF_HELPER_1(iwmmxt_unpacklul, i64, i64)
|
DEF_HELPER_2(iwmmxt_unpacklul, i64, env, i64)
|
||||||
DEF_HELPER_1(iwmmxt_unpackhub, i64, i64)
|
DEF_HELPER_2(iwmmxt_unpackhub, i64, env, i64)
|
||||||
DEF_HELPER_1(iwmmxt_unpackhuw, i64, i64)
|
DEF_HELPER_2(iwmmxt_unpackhuw, i64, env, i64)
|
||||||
DEF_HELPER_1(iwmmxt_unpackhul, i64, i64)
|
DEF_HELPER_2(iwmmxt_unpackhul, i64, env, i64)
|
||||||
DEF_HELPER_1(iwmmxt_unpacklsb, i64, i64)
|
DEF_HELPER_2(iwmmxt_unpacklsb, i64, env, i64)
|
||||||
DEF_HELPER_1(iwmmxt_unpacklsw, i64, i64)
|
DEF_HELPER_2(iwmmxt_unpacklsw, i64, env, i64)
|
||||||
DEF_HELPER_1(iwmmxt_unpacklsl, i64, i64)
|
DEF_HELPER_2(iwmmxt_unpacklsl, i64, env, i64)
|
||||||
DEF_HELPER_1(iwmmxt_unpackhsb, i64, i64)
|
DEF_HELPER_2(iwmmxt_unpackhsb, i64, env, i64)
|
||||||
DEF_HELPER_1(iwmmxt_unpackhsw, i64, i64)
|
DEF_HELPER_2(iwmmxt_unpackhsw, i64, env, i64)
|
||||||
DEF_HELPER_1(iwmmxt_unpackhsl, i64, i64)
|
DEF_HELPER_2(iwmmxt_unpackhsl, i64, env, i64)
|
||||||
|
|
||||||
DEF_IWMMXT_HELPER_SIZE(cmpeq)
|
DEF_IWMMXT_HELPER_SIZE_ENV(cmpeq)
|
||||||
DEF_IWMMXT_HELPER_SIZE(cmpgtu)
|
DEF_IWMMXT_HELPER_SIZE_ENV(cmpgtu)
|
||||||
DEF_IWMMXT_HELPER_SIZE(cmpgts)
|
DEF_IWMMXT_HELPER_SIZE_ENV(cmpgts)
|
||||||
|
|
||||||
DEF_IWMMXT_HELPER_SIZE(mins)
|
DEF_IWMMXT_HELPER_SIZE_ENV(mins)
|
||||||
DEF_IWMMXT_HELPER_SIZE(minu)
|
DEF_IWMMXT_HELPER_SIZE_ENV(minu)
|
||||||
DEF_IWMMXT_HELPER_SIZE(maxs)
|
DEF_IWMMXT_HELPER_SIZE_ENV(maxs)
|
||||||
DEF_IWMMXT_HELPER_SIZE(maxu)
|
DEF_IWMMXT_HELPER_SIZE_ENV(maxu)
|
||||||
|
|
||||||
DEF_IWMMXT_HELPER_SIZE(subn)
|
DEF_IWMMXT_HELPER_SIZE_ENV(subn)
|
||||||
DEF_IWMMXT_HELPER_SIZE(addn)
|
DEF_IWMMXT_HELPER_SIZE_ENV(addn)
|
||||||
DEF_IWMMXT_HELPER_SIZE(subu)
|
DEF_IWMMXT_HELPER_SIZE_ENV(subu)
|
||||||
DEF_IWMMXT_HELPER_SIZE(addu)
|
DEF_IWMMXT_HELPER_SIZE_ENV(addu)
|
||||||
DEF_IWMMXT_HELPER_SIZE(subs)
|
DEF_IWMMXT_HELPER_SIZE_ENV(subs)
|
||||||
DEF_IWMMXT_HELPER_SIZE(adds)
|
DEF_IWMMXT_HELPER_SIZE_ENV(adds)
|
||||||
|
|
||||||
DEF_HELPER_2(iwmmxt_avgb0, i64, i64, i64)
|
DEF_HELPER_3(iwmmxt_avgb0, i64, env, i64, i64)
|
||||||
DEF_HELPER_2(iwmmxt_avgb1, i64, i64, i64)
|
DEF_HELPER_3(iwmmxt_avgb1, i64, env, i64, i64)
|
||||||
DEF_HELPER_2(iwmmxt_avgw0, i64, i64, i64)
|
DEF_HELPER_3(iwmmxt_avgw0, i64, env, i64, i64)
|
||||||
DEF_HELPER_2(iwmmxt_avgw1, i64, i64, i64)
|
DEF_HELPER_3(iwmmxt_avgw1, i64, env, i64, i64)
|
||||||
|
|
||||||
DEF_HELPER_2(iwmmxt_msadb, i64, i64, i64)
|
DEF_HELPER_2(iwmmxt_msadb, i64, i64, i64)
|
||||||
|
|
||||||
@ -434,26 +434,26 @@ DEF_HELPER_1(iwmmxt_msbb, i32, i64)
|
|||||||
DEF_HELPER_1(iwmmxt_msbw, i32, i64)
|
DEF_HELPER_1(iwmmxt_msbw, i32, i64)
|
||||||
DEF_HELPER_1(iwmmxt_msbl, i32, i64)
|
DEF_HELPER_1(iwmmxt_msbl, i32, i64)
|
||||||
|
|
||||||
DEF_HELPER_2(iwmmxt_srlw, i64, i64, i32)
|
DEF_HELPER_3(iwmmxt_srlw, i64, env, i64, i32)
|
||||||
DEF_HELPER_2(iwmmxt_srll, i64, i64, i32)
|
DEF_HELPER_3(iwmmxt_srll, i64, env, i64, i32)
|
||||||
DEF_HELPER_2(iwmmxt_srlq, i64, i64, i32)
|
DEF_HELPER_3(iwmmxt_srlq, i64, env, i64, i32)
|
||||||
DEF_HELPER_2(iwmmxt_sllw, i64, i64, i32)
|
DEF_HELPER_3(iwmmxt_sllw, i64, env, i64, i32)
|
||||||
DEF_HELPER_2(iwmmxt_slll, i64, i64, i32)
|
DEF_HELPER_3(iwmmxt_slll, i64, env, i64, i32)
|
||||||
DEF_HELPER_2(iwmmxt_sllq, i64, i64, i32)
|
DEF_HELPER_3(iwmmxt_sllq, i64, env, i64, i32)
|
||||||
DEF_HELPER_2(iwmmxt_sraw, i64, i64, i32)
|
DEF_HELPER_3(iwmmxt_sraw, i64, env, i64, i32)
|
||||||
DEF_HELPER_2(iwmmxt_sral, i64, i64, i32)
|
DEF_HELPER_3(iwmmxt_sral, i64, env, i64, i32)
|
||||||
DEF_HELPER_2(iwmmxt_sraq, i64, i64, i32)
|
DEF_HELPER_3(iwmmxt_sraq, i64, env, i64, i32)
|
||||||
DEF_HELPER_2(iwmmxt_rorw, i64, i64, i32)
|
DEF_HELPER_3(iwmmxt_rorw, i64, env, i64, i32)
|
||||||
DEF_HELPER_2(iwmmxt_rorl, i64, i64, i32)
|
DEF_HELPER_3(iwmmxt_rorl, i64, env, i64, i32)
|
||||||
DEF_HELPER_2(iwmmxt_rorq, i64, i64, i32)
|
DEF_HELPER_3(iwmmxt_rorq, i64, env, i64, i32)
|
||||||
DEF_HELPER_2(iwmmxt_shufh, i64, i64, i32)
|
DEF_HELPER_3(iwmmxt_shufh, i64, env, i64, i32)
|
||||||
|
|
||||||
DEF_HELPER_2(iwmmxt_packuw, i64, i64, i64)
|
DEF_HELPER_3(iwmmxt_packuw, i64, env, i64, i64)
|
||||||
DEF_HELPER_2(iwmmxt_packul, i64, i64, i64)
|
DEF_HELPER_3(iwmmxt_packul, i64, env, i64, i64)
|
||||||
DEF_HELPER_2(iwmmxt_packuq, i64, i64, i64)
|
DEF_HELPER_3(iwmmxt_packuq, i64, env, i64, i64)
|
||||||
DEF_HELPER_2(iwmmxt_packsw, i64, i64, i64)
|
DEF_HELPER_3(iwmmxt_packsw, i64, env, i64, i64)
|
||||||
DEF_HELPER_2(iwmmxt_packsl, i64, i64, i64)
|
DEF_HELPER_3(iwmmxt_packsl, i64, env, i64, i64)
|
||||||
DEF_HELPER_2(iwmmxt_packsq, i64, i64, i64)
|
DEF_HELPER_3(iwmmxt_packsq, i64, env, i64, i64)
|
||||||
|
|
||||||
DEF_HELPER_3(iwmmxt_muladdsl, i64, i64, i32, i32)
|
DEF_HELPER_3(iwmmxt_muladdsl, i64, i64, i32, i32)
|
||||||
DEF_HELPER_3(iwmmxt_muladdsw, i64, i64, i32, i32)
|
DEF_HELPER_3(iwmmxt_muladdsw, i64, i64, i32, i32)
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
#include "exec.h"
|
#include "exec-all.h"
|
||||||
#include "helper.h"
|
#include "helper.h"
|
||||||
|
|
||||||
/* iwMMXt macros extracted from GNU gdb. */
|
/* iwMMXt macros extracted from GNU gdb. */
|
||||||
@ -162,7 +162,8 @@ uint64_t HELPER(iwmmxt_macuw)(uint64_t a, uint64_t b)
|
|||||||
SIMD64_SET(NBIT64(x), SIMD_NBIT) | \
|
SIMD64_SET(NBIT64(x), SIMD_NBIT) | \
|
||||||
SIMD64_SET(ZBIT64(x), SIMD_ZBIT)
|
SIMD64_SET(ZBIT64(x), SIMD_ZBIT)
|
||||||
#define IWMMXT_OP_UNPACK(S, SH0, SH1, SH2, SH3) \
|
#define IWMMXT_OP_UNPACK(S, SH0, SH1, SH2, SH3) \
|
||||||
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, b)))(uint64_t a, uint64_t b) \
|
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, b)))(CPUState *env, \
|
||||||
|
uint64_t a, uint64_t b) \
|
||||||
{ \
|
{ \
|
||||||
a = \
|
a = \
|
||||||
(((a >> SH0) & 0xff) << 0) | (((b >> SH0) & 0xff) << 8) | \
|
(((a >> SH0) & 0xff) << 0) | (((b >> SH0) & 0xff) << 8) | \
|
||||||
@ -176,7 +177,8 @@ uint64_t HELPER(glue(iwmmxt_unpack, glue(S, b)))(uint64_t a, uint64_t b) \
|
|||||||
NZBIT8(a >> 48, 6) | NZBIT8(a >> 56, 7); \
|
NZBIT8(a >> 48, 6) | NZBIT8(a >> 56, 7); \
|
||||||
return a; \
|
return a; \
|
||||||
} \
|
} \
|
||||||
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, w)))(uint64_t a, uint64_t b) \
|
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, w)))(CPUState *env, \
|
||||||
|
uint64_t a, uint64_t b) \
|
||||||
{ \
|
{ \
|
||||||
a = \
|
a = \
|
||||||
(((a >> SH0) & 0xffff) << 0) | \
|
(((a >> SH0) & 0xffff) << 0) | \
|
||||||
@ -188,7 +190,8 @@ uint64_t HELPER(glue(iwmmxt_unpack, glue(S, w)))(uint64_t a, uint64_t b) \
|
|||||||
NZBIT8(a >> 32, 2) | NZBIT8(a >> 48, 3); \
|
NZBIT8(a >> 32, 2) | NZBIT8(a >> 48, 3); \
|
||||||
return a; \
|
return a; \
|
||||||
} \
|
} \
|
||||||
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, l)))(uint64_t a, uint64_t b) \
|
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, l)))(CPUState *env, \
|
||||||
|
uint64_t a, uint64_t b) \
|
||||||
{ \
|
{ \
|
||||||
a = \
|
a = \
|
||||||
(((a >> SH0) & 0xffffffff) << 0) | \
|
(((a >> SH0) & 0xffffffff) << 0) | \
|
||||||
@ -197,7 +200,8 @@ uint64_t HELPER(glue(iwmmxt_unpack, glue(S, l)))(uint64_t a, uint64_t b) \
|
|||||||
NZBIT32(a >> 0, 0) | NZBIT32(a >> 32, 1); \
|
NZBIT32(a >> 0, 0) | NZBIT32(a >> 32, 1); \
|
||||||
return a; \
|
return a; \
|
||||||
} \
|
} \
|
||||||
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, ub)))(uint64_t x) \
|
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, ub)))(CPUState *env, \
|
||||||
|
uint64_t x) \
|
||||||
{ \
|
{ \
|
||||||
x = \
|
x = \
|
||||||
(((x >> SH0) & 0xff) << 0) | \
|
(((x >> SH0) & 0xff) << 0) | \
|
||||||
@ -209,7 +213,8 @@ uint64_t HELPER(glue(iwmmxt_unpack, glue(S, ub)))(uint64_t x) \
|
|||||||
NZBIT16(x >> 32, 2) | NZBIT16(x >> 48, 3); \
|
NZBIT16(x >> 32, 2) | NZBIT16(x >> 48, 3); \
|
||||||
return x; \
|
return x; \
|
||||||
} \
|
} \
|
||||||
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, uw)))(uint64_t x) \
|
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, uw)))(CPUState *env, \
|
||||||
|
uint64_t x) \
|
||||||
{ \
|
{ \
|
||||||
x = \
|
x = \
|
||||||
(((x >> SH0) & 0xffff) << 0) | \
|
(((x >> SH0) & 0xffff) << 0) | \
|
||||||
@ -218,13 +223,15 @@ uint64_t HELPER(glue(iwmmxt_unpack, glue(S, uw)))(uint64_t x) \
|
|||||||
NZBIT32(x >> 0, 0) | NZBIT32(x >> 32, 1); \
|
NZBIT32(x >> 0, 0) | NZBIT32(x >> 32, 1); \
|
||||||
return x; \
|
return x; \
|
||||||
} \
|
} \
|
||||||
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, ul)))(uint64_t x) \
|
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, ul)))(CPUState *env, \
|
||||||
|
uint64_t x) \
|
||||||
{ \
|
{ \
|
||||||
x = (((x >> SH0) & 0xffffffff) << 0); \
|
x = (((x >> SH0) & 0xffffffff) << 0); \
|
||||||
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] = NZBIT64(x >> 0); \
|
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] = NZBIT64(x >> 0); \
|
||||||
return x; \
|
return x; \
|
||||||
} \
|
} \
|
||||||
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, sb)))(uint64_t x) \
|
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, sb)))(CPUState *env, \
|
||||||
|
uint64_t x) \
|
||||||
{ \
|
{ \
|
||||||
x = \
|
x = \
|
||||||
((uint64_t) EXTEND8H((x >> SH0) & 0xff) << 0) | \
|
((uint64_t) EXTEND8H((x >> SH0) & 0xff) << 0) | \
|
||||||
@ -236,7 +243,8 @@ uint64_t HELPER(glue(iwmmxt_unpack, glue(S, sb)))(uint64_t x) \
|
|||||||
NZBIT16(x >> 32, 2) | NZBIT16(x >> 48, 3); \
|
NZBIT16(x >> 32, 2) | NZBIT16(x >> 48, 3); \
|
||||||
return x; \
|
return x; \
|
||||||
} \
|
} \
|
||||||
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, sw)))(uint64_t x) \
|
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, sw)))(CPUState *env, \
|
||||||
|
uint64_t x) \
|
||||||
{ \
|
{ \
|
||||||
x = \
|
x = \
|
||||||
((uint64_t) EXTEND16((x >> SH0) & 0xffff) << 0) | \
|
((uint64_t) EXTEND16((x >> SH0) & 0xffff) << 0) | \
|
||||||
@ -245,7 +253,8 @@ uint64_t HELPER(glue(iwmmxt_unpack, glue(S, sw)))(uint64_t x) \
|
|||||||
NZBIT32(x >> 0, 0) | NZBIT32(x >> 32, 1); \
|
NZBIT32(x >> 0, 0) | NZBIT32(x >> 32, 1); \
|
||||||
return x; \
|
return x; \
|
||||||
} \
|
} \
|
||||||
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, sl)))(uint64_t x) \
|
uint64_t HELPER(glue(iwmmxt_unpack, glue(S, sl)))(CPUState *env, \
|
||||||
|
uint64_t x) \
|
||||||
{ \
|
{ \
|
||||||
x = EXTEND32((x >> SH0) & 0xffffffff); \
|
x = EXTEND32((x >> SH0) & 0xffffffff); \
|
||||||
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] = NZBIT64(x >> 0); \
|
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] = NZBIT64(x >> 0); \
|
||||||
@ -255,7 +264,8 @@ IWMMXT_OP_UNPACK(l, 0, 8, 16, 24)
|
|||||||
IWMMXT_OP_UNPACK(h, 32, 40, 48, 56)
|
IWMMXT_OP_UNPACK(h, 32, 40, 48, 56)
|
||||||
|
|
||||||
#define IWMMXT_OP_CMP(SUFF, Tb, Tw, Tl, O) \
|
#define IWMMXT_OP_CMP(SUFF, Tb, Tw, Tl, O) \
|
||||||
uint64_t HELPER(glue(iwmmxt_, glue(SUFF, b)))(uint64_t a, uint64_t b) \
|
uint64_t HELPER(glue(iwmmxt_, glue(SUFF, b)))(CPUState *env, \
|
||||||
|
uint64_t a, uint64_t b) \
|
||||||
{ \
|
{ \
|
||||||
a = \
|
a = \
|
||||||
CMP(0, Tb, O, 0xff) | CMP(8, Tb, O, 0xff) | \
|
CMP(0, Tb, O, 0xff) | CMP(8, Tb, O, 0xff) | \
|
||||||
@ -269,7 +279,8 @@ uint64_t HELPER(glue(iwmmxt_, glue(SUFF, b)))(uint64_t a, uint64_t b) \
|
|||||||
NZBIT8(a >> 48, 6) | NZBIT8(a >> 56, 7); \
|
NZBIT8(a >> 48, 6) | NZBIT8(a >> 56, 7); \
|
||||||
return a; \
|
return a; \
|
||||||
} \
|
} \
|
||||||
uint64_t HELPER(glue(iwmmxt_, glue(SUFF, w)))(uint64_t a, uint64_t b) \
|
uint64_t HELPER(glue(iwmmxt_, glue(SUFF, w)))(CPUState *env, \
|
||||||
|
uint64_t a, uint64_t b) \
|
||||||
{ \
|
{ \
|
||||||
a = CMP(0, Tw, O, 0xffff) | CMP(16, Tw, O, 0xffff) | \
|
a = CMP(0, Tw, O, 0xffff) | CMP(16, Tw, O, 0xffff) | \
|
||||||
CMP(32, Tw, O, 0xffff) | CMP(48, Tw, O, 0xffff); \
|
CMP(32, Tw, O, 0xffff) | CMP(48, Tw, O, 0xffff); \
|
||||||
@ -278,7 +289,8 @@ uint64_t HELPER(glue(iwmmxt_, glue(SUFF, w)))(uint64_t a, uint64_t b) \
|
|||||||
NZBIT16(a >> 32, 2) | NZBIT16(a >> 48, 3); \
|
NZBIT16(a >> 32, 2) | NZBIT16(a >> 48, 3); \
|
||||||
return a; \
|
return a; \
|
||||||
} \
|
} \
|
||||||
uint64_t HELPER(glue(iwmmxt_, glue(SUFF, l)))(uint64_t a, uint64_t b) \
|
uint64_t HELPER(glue(iwmmxt_, glue(SUFF, l)))(CPUState *env, \
|
||||||
|
uint64_t a, uint64_t b) \
|
||||||
{ \
|
{ \
|
||||||
a = CMP(0, Tl, O, 0xffffffff) | \
|
a = CMP(0, Tl, O, 0xffffffff) | \
|
||||||
CMP(32, Tl, O, 0xffffffff); \
|
CMP(32, Tl, O, 0xffffffff); \
|
||||||
@ -317,7 +329,7 @@ IWMMXT_OP_CMP(adds, int8_t, int16_t, int32_t, +)
|
|||||||
#define AVGB(SHR) ((( \
|
#define AVGB(SHR) ((( \
|
||||||
((a >> SHR) & 0xff) + ((b >> SHR) & 0xff) + round) >> 1) << SHR)
|
((a >> SHR) & 0xff) + ((b >> SHR) & 0xff) + round) >> 1) << SHR)
|
||||||
#define IWMMXT_OP_AVGB(r) \
|
#define IWMMXT_OP_AVGB(r) \
|
||||||
uint64_t HELPER(iwmmxt_avgb##r)(uint64_t a, uint64_t b) \
|
uint64_t HELPER(iwmmxt_avgb##r)(CPUState *env, uint64_t a, uint64_t b) \
|
||||||
{ \
|
{ \
|
||||||
const int round = r; \
|
const int round = r; \
|
||||||
a = AVGB(0) | AVGB(8) | AVGB(16) | AVGB(24) | \
|
a = AVGB(0) | AVGB(8) | AVGB(16) | AVGB(24) | \
|
||||||
@ -341,7 +353,7 @@ IWMMXT_OP_AVGB(1)
|
|||||||
#define AVGW(SHR) ((( \
|
#define AVGW(SHR) ((( \
|
||||||
((a >> SHR) & 0xffff) + ((b >> SHR) & 0xffff) + round) >> 1) << SHR)
|
((a >> SHR) & 0xffff) + ((b >> SHR) & 0xffff) + round) >> 1) << SHR)
|
||||||
#define IWMMXT_OP_AVGW(r) \
|
#define IWMMXT_OP_AVGW(r) \
|
||||||
uint64_t HELPER(iwmmxt_avgw##r)(uint64_t a, uint64_t b) \
|
uint64_t HELPER(iwmmxt_avgw##r)(CPUState *env, uint64_t a, uint64_t b) \
|
||||||
{ \
|
{ \
|
||||||
const int round = r; \
|
const int round = r; \
|
||||||
a = AVGW(0) | AVGW(16) | AVGW(32) | AVGW(48); \
|
a = AVGW(0) | AVGW(16) | AVGW(32) | AVGW(48); \
|
||||||
@ -452,7 +464,7 @@ uint32_t HELPER(iwmmxt_msbl)(uint64_t x)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: Split wCASF setting into a separate op to avoid env use. */
|
/* FIXME: Split wCASF setting into a separate op to avoid env use. */
|
||||||
uint64_t HELPER(iwmmxt_srlw)(uint64_t x, uint32_t n)
|
uint64_t HELPER(iwmmxt_srlw)(CPUState *env, uint64_t x, uint32_t n)
|
||||||
{
|
{
|
||||||
x = (((x & (0xffffll << 0)) >> n) & (0xffffll << 0)) |
|
x = (((x & (0xffffll << 0)) >> n) & (0xffffll << 0)) |
|
||||||
(((x & (0xffffll << 16)) >> n) & (0xffffll << 16)) |
|
(((x & (0xffffll << 16)) >> n) & (0xffffll << 16)) |
|
||||||
@ -464,7 +476,7 @@ uint64_t HELPER(iwmmxt_srlw)(uint64_t x, uint32_t n)
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_srll)(uint64_t x, uint32_t n)
|
uint64_t HELPER(iwmmxt_srll)(CPUState *env, uint64_t x, uint32_t n)
|
||||||
{
|
{
|
||||||
x = ((x & (0xffffffffll << 0)) >> n) |
|
x = ((x & (0xffffffffll << 0)) >> n) |
|
||||||
((x >> n) & (0xffffffffll << 32));
|
((x >> n) & (0xffffffffll << 32));
|
||||||
@ -473,14 +485,14 @@ uint64_t HELPER(iwmmxt_srll)(uint64_t x, uint32_t n)
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_srlq)(uint64_t x, uint32_t n)
|
uint64_t HELPER(iwmmxt_srlq)(CPUState *env, uint64_t x, uint32_t n)
|
||||||
{
|
{
|
||||||
x >>= n;
|
x >>= n;
|
||||||
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] = NZBIT64(x);
|
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] = NZBIT64(x);
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_sllw)(uint64_t x, uint32_t n)
|
uint64_t HELPER(iwmmxt_sllw)(CPUState *env, uint64_t x, uint32_t n)
|
||||||
{
|
{
|
||||||
x = (((x & (0xffffll << 0)) << n) & (0xffffll << 0)) |
|
x = (((x & (0xffffll << 0)) << n) & (0xffffll << 0)) |
|
||||||
(((x & (0xffffll << 16)) << n) & (0xffffll << 16)) |
|
(((x & (0xffffll << 16)) << n) & (0xffffll << 16)) |
|
||||||
@ -492,7 +504,7 @@ uint64_t HELPER(iwmmxt_sllw)(uint64_t x, uint32_t n)
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_slll)(uint64_t x, uint32_t n)
|
uint64_t HELPER(iwmmxt_slll)(CPUState *env, uint64_t x, uint32_t n)
|
||||||
{
|
{
|
||||||
x = ((x << n) & (0xffffffffll << 0)) |
|
x = ((x << n) & (0xffffffffll << 0)) |
|
||||||
((x & (0xffffffffll << 32)) << n);
|
((x & (0xffffffffll << 32)) << n);
|
||||||
@ -501,14 +513,14 @@ uint64_t HELPER(iwmmxt_slll)(uint64_t x, uint32_t n)
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_sllq)(uint64_t x, uint32_t n)
|
uint64_t HELPER(iwmmxt_sllq)(CPUState *env, uint64_t x, uint32_t n)
|
||||||
{
|
{
|
||||||
x <<= n;
|
x <<= n;
|
||||||
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] = NZBIT64(x);
|
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] = NZBIT64(x);
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_sraw)(uint64_t x, uint32_t n)
|
uint64_t HELPER(iwmmxt_sraw)(CPUState *env, uint64_t x, uint32_t n)
|
||||||
{
|
{
|
||||||
x = ((uint64_t) ((EXTEND16(x >> 0) >> n) & 0xffff) << 0) |
|
x = ((uint64_t) ((EXTEND16(x >> 0) >> n) & 0xffff) << 0) |
|
||||||
((uint64_t) ((EXTEND16(x >> 16) >> n) & 0xffff) << 16) |
|
((uint64_t) ((EXTEND16(x >> 16) >> n) & 0xffff) << 16) |
|
||||||
@ -520,7 +532,7 @@ uint64_t HELPER(iwmmxt_sraw)(uint64_t x, uint32_t n)
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_sral)(uint64_t x, uint32_t n)
|
uint64_t HELPER(iwmmxt_sral)(CPUState *env, uint64_t x, uint32_t n)
|
||||||
{
|
{
|
||||||
x = (((EXTEND32(x >> 0) >> n) & 0xffffffff) << 0) |
|
x = (((EXTEND32(x >> 0) >> n) & 0xffffffff) << 0) |
|
||||||
(((EXTEND32(x >> 32) >> n) & 0xffffffff) << 32);
|
(((EXTEND32(x >> 32) >> n) & 0xffffffff) << 32);
|
||||||
@ -529,14 +541,14 @@ uint64_t HELPER(iwmmxt_sral)(uint64_t x, uint32_t n)
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_sraq)(uint64_t x, uint32_t n)
|
uint64_t HELPER(iwmmxt_sraq)(CPUState *env, uint64_t x, uint32_t n)
|
||||||
{
|
{
|
||||||
x = (int64_t) x >> n;
|
x = (int64_t) x >> n;
|
||||||
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] = NZBIT64(x);
|
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] = NZBIT64(x);
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_rorw)(uint64_t x, uint32_t n)
|
uint64_t HELPER(iwmmxt_rorw)(CPUState *env, uint64_t x, uint32_t n)
|
||||||
{
|
{
|
||||||
x = ((((x & (0xffffll << 0)) >> n) |
|
x = ((((x & (0xffffll << 0)) >> n) |
|
||||||
((x & (0xffffll << 0)) << (16 - n))) & (0xffffll << 0)) |
|
((x & (0xffffll << 0)) << (16 - n))) & (0xffffll << 0)) |
|
||||||
@ -552,7 +564,7 @@ uint64_t HELPER(iwmmxt_rorw)(uint64_t x, uint32_t n)
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_rorl)(uint64_t x, uint32_t n)
|
uint64_t HELPER(iwmmxt_rorl)(CPUState *env, uint64_t x, uint32_t n)
|
||||||
{
|
{
|
||||||
x = ((x & (0xffffffffll << 0)) >> n) |
|
x = ((x & (0xffffffffll << 0)) >> n) |
|
||||||
((x >> n) & (0xffffffffll << 32)) |
|
((x >> n) & (0xffffffffll << 32)) |
|
||||||
@ -563,14 +575,14 @@ uint64_t HELPER(iwmmxt_rorl)(uint64_t x, uint32_t n)
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_rorq)(uint64_t x, uint32_t n)
|
uint64_t HELPER(iwmmxt_rorq)(CPUState *env, uint64_t x, uint32_t n)
|
||||||
{
|
{
|
||||||
x = (x >> n) | (x << (64 - n));
|
x = (x >> n) | (x << (64 - n));
|
||||||
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] = NZBIT64(x);
|
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] = NZBIT64(x);
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_shufh)(uint64_t x, uint32_t n)
|
uint64_t HELPER(iwmmxt_shufh)(CPUState *env, uint64_t x, uint32_t n)
|
||||||
{
|
{
|
||||||
x = (((x >> ((n << 4) & 0x30)) & 0xffff) << 0) |
|
x = (((x >> ((n << 4) & 0x30)) & 0xffff) << 0) |
|
||||||
(((x >> ((n << 2) & 0x30)) & 0xffff) << 16) |
|
(((x >> ((n << 2) & 0x30)) & 0xffff) << 16) |
|
||||||
@ -583,7 +595,7 @@ uint64_t HELPER(iwmmxt_shufh)(uint64_t x, uint32_t n)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: Unsigned-Saturation */
|
/* TODO: Unsigned-Saturation */
|
||||||
uint64_t HELPER(iwmmxt_packuw)(uint64_t a, uint64_t b)
|
uint64_t HELPER(iwmmxt_packuw)(CPUState *env, uint64_t a, uint64_t b)
|
||||||
{
|
{
|
||||||
a = (((a >> 0) & 0xff) << 0) | (((a >> 16) & 0xff) << 8) |
|
a = (((a >> 0) & 0xff) << 0) | (((a >> 16) & 0xff) << 8) |
|
||||||
(((a >> 32) & 0xff) << 16) | (((a >> 48) & 0xff) << 24) |
|
(((a >> 32) & 0xff) << 16) | (((a >> 48) & 0xff) << 24) |
|
||||||
@ -597,7 +609,7 @@ uint64_t HELPER(iwmmxt_packuw)(uint64_t a, uint64_t b)
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_packul)(uint64_t a, uint64_t b)
|
uint64_t HELPER(iwmmxt_packul)(CPUState *env, uint64_t a, uint64_t b)
|
||||||
{
|
{
|
||||||
a = (((a >> 0) & 0xffff) << 0) | (((a >> 32) & 0xffff) << 16) |
|
a = (((a >> 0) & 0xffff) << 0) | (((a >> 32) & 0xffff) << 16) |
|
||||||
(((b >> 0) & 0xffff) << 32) | (((b >> 32) & 0xffff) << 48);
|
(((b >> 0) & 0xffff) << 32) | (((b >> 32) & 0xffff) << 48);
|
||||||
@ -607,7 +619,7 @@ uint64_t HELPER(iwmmxt_packul)(uint64_t a, uint64_t b)
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_packuq)(uint64_t a, uint64_t b)
|
uint64_t HELPER(iwmmxt_packuq)(CPUState *env, uint64_t a, uint64_t b)
|
||||||
{
|
{
|
||||||
a = (a & 0xffffffff) | ((b & 0xffffffff) << 32);
|
a = (a & 0xffffffff) | ((b & 0xffffffff) << 32);
|
||||||
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] =
|
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] =
|
||||||
@ -616,7 +628,7 @@ uint64_t HELPER(iwmmxt_packuq)(uint64_t a, uint64_t b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: Signed-Saturation */
|
/* TODO: Signed-Saturation */
|
||||||
uint64_t HELPER(iwmmxt_packsw)(uint64_t a, uint64_t b)
|
uint64_t HELPER(iwmmxt_packsw)(CPUState *env, uint64_t a, uint64_t b)
|
||||||
{
|
{
|
||||||
a = (((a >> 0) & 0xff) << 0) | (((a >> 16) & 0xff) << 8) |
|
a = (((a >> 0) & 0xff) << 0) | (((a >> 16) & 0xff) << 8) |
|
||||||
(((a >> 32) & 0xff) << 16) | (((a >> 48) & 0xff) << 24) |
|
(((a >> 32) & 0xff) << 16) | (((a >> 48) & 0xff) << 24) |
|
||||||
@ -630,7 +642,7 @@ uint64_t HELPER(iwmmxt_packsw)(uint64_t a, uint64_t b)
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_packsl)(uint64_t a, uint64_t b)
|
uint64_t HELPER(iwmmxt_packsl)(CPUState *env, uint64_t a, uint64_t b)
|
||||||
{
|
{
|
||||||
a = (((a >> 0) & 0xffff) << 0) | (((a >> 32) & 0xffff) << 16) |
|
a = (((a >> 0) & 0xffff) << 0) | (((a >> 32) & 0xffff) << 16) |
|
||||||
(((b >> 0) & 0xffff) << 32) | (((b >> 32) & 0xffff) << 48);
|
(((b >> 0) & 0xffff) << 32) | (((b >> 32) & 0xffff) << 48);
|
||||||
@ -640,7 +652,7 @@ uint64_t HELPER(iwmmxt_packsl)(uint64_t a, uint64_t b)
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t HELPER(iwmmxt_packsq)(uint64_t a, uint64_t b)
|
uint64_t HELPER(iwmmxt_packsq)(CPUState *env, uint64_t a, uint64_t b)
|
||||||
{
|
{
|
||||||
a = (a & 0xffffffff) | ((b & 0xffffffff) << 32);
|
a = (a & 0xffffffff) | ((b & 0xffffffff) << 32);
|
||||||
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] =
|
env->iwmmxt.cregs[ARM_IWMMXT_wCASF] =
|
||||||
|
@ -1207,15 +1207,22 @@ static inline void gen_op_iwmmxt_##name##_M0_wRn(int rn) \
|
|||||||
gen_helper_iwmmxt_##name(cpu_M0, cpu_M0, cpu_V1); \
|
gen_helper_iwmmxt_##name(cpu_M0, cpu_M0, cpu_V1); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define IWMMXT_OP_SIZE(name) \
|
#define IWMMXT_OP_ENV(name) \
|
||||||
IWMMXT_OP(name##b) \
|
static inline void gen_op_iwmmxt_##name##_M0_wRn(int rn) \
|
||||||
IWMMXT_OP(name##w) \
|
{ \
|
||||||
IWMMXT_OP(name##l)
|
iwmmxt_load_reg(cpu_V1, rn); \
|
||||||
|
gen_helper_iwmmxt_##name(cpu_M0, cpu_env, cpu_M0, cpu_V1); \
|
||||||
|
}
|
||||||
|
|
||||||
#define IWMMXT_OP_1(name) \
|
#define IWMMXT_OP_ENV_SIZE(name) \
|
||||||
|
IWMMXT_OP_ENV(name##b) \
|
||||||
|
IWMMXT_OP_ENV(name##w) \
|
||||||
|
IWMMXT_OP_ENV(name##l)
|
||||||
|
|
||||||
|
#define IWMMXT_OP_ENV1(name) \
|
||||||
static inline void gen_op_iwmmxt_##name##_M0(void) \
|
static inline void gen_op_iwmmxt_##name##_M0(void) \
|
||||||
{ \
|
{ \
|
||||||
gen_helper_iwmmxt_##name(cpu_M0, cpu_M0); \
|
gen_helper_iwmmxt_##name(cpu_M0, cpu_env, cpu_M0); \
|
||||||
}
|
}
|
||||||
|
|
||||||
IWMMXT_OP(maddsq)
|
IWMMXT_OP(maddsq)
|
||||||
@ -1229,51 +1236,51 @@ IWMMXT_OP(muluhw)
|
|||||||
IWMMXT_OP(macsw)
|
IWMMXT_OP(macsw)
|
||||||
IWMMXT_OP(macuw)
|
IWMMXT_OP(macuw)
|
||||||
|
|
||||||
IWMMXT_OP_SIZE(unpackl)
|
IWMMXT_OP_ENV_SIZE(unpackl)
|
||||||
IWMMXT_OP_SIZE(unpackh)
|
IWMMXT_OP_ENV_SIZE(unpackh)
|
||||||
|
|
||||||
IWMMXT_OP_1(unpacklub)
|
IWMMXT_OP_ENV1(unpacklub)
|
||||||
IWMMXT_OP_1(unpackluw)
|
IWMMXT_OP_ENV1(unpackluw)
|
||||||
IWMMXT_OP_1(unpacklul)
|
IWMMXT_OP_ENV1(unpacklul)
|
||||||
IWMMXT_OP_1(unpackhub)
|
IWMMXT_OP_ENV1(unpackhub)
|
||||||
IWMMXT_OP_1(unpackhuw)
|
IWMMXT_OP_ENV1(unpackhuw)
|
||||||
IWMMXT_OP_1(unpackhul)
|
IWMMXT_OP_ENV1(unpackhul)
|
||||||
IWMMXT_OP_1(unpacklsb)
|
IWMMXT_OP_ENV1(unpacklsb)
|
||||||
IWMMXT_OP_1(unpacklsw)
|
IWMMXT_OP_ENV1(unpacklsw)
|
||||||
IWMMXT_OP_1(unpacklsl)
|
IWMMXT_OP_ENV1(unpacklsl)
|
||||||
IWMMXT_OP_1(unpackhsb)
|
IWMMXT_OP_ENV1(unpackhsb)
|
||||||
IWMMXT_OP_1(unpackhsw)
|
IWMMXT_OP_ENV1(unpackhsw)
|
||||||
IWMMXT_OP_1(unpackhsl)
|
IWMMXT_OP_ENV1(unpackhsl)
|
||||||
|
|
||||||
IWMMXT_OP_SIZE(cmpeq)
|
IWMMXT_OP_ENV_SIZE(cmpeq)
|
||||||
IWMMXT_OP_SIZE(cmpgtu)
|
IWMMXT_OP_ENV_SIZE(cmpgtu)
|
||||||
IWMMXT_OP_SIZE(cmpgts)
|
IWMMXT_OP_ENV_SIZE(cmpgts)
|
||||||
|
|
||||||
IWMMXT_OP_SIZE(mins)
|
IWMMXT_OP_ENV_SIZE(mins)
|
||||||
IWMMXT_OP_SIZE(minu)
|
IWMMXT_OP_ENV_SIZE(minu)
|
||||||
IWMMXT_OP_SIZE(maxs)
|
IWMMXT_OP_ENV_SIZE(maxs)
|
||||||
IWMMXT_OP_SIZE(maxu)
|
IWMMXT_OP_ENV_SIZE(maxu)
|
||||||
|
|
||||||
IWMMXT_OP_SIZE(subn)
|
IWMMXT_OP_ENV_SIZE(subn)
|
||||||
IWMMXT_OP_SIZE(addn)
|
IWMMXT_OP_ENV_SIZE(addn)
|
||||||
IWMMXT_OP_SIZE(subu)
|
IWMMXT_OP_ENV_SIZE(subu)
|
||||||
IWMMXT_OP_SIZE(addu)
|
IWMMXT_OP_ENV_SIZE(addu)
|
||||||
IWMMXT_OP_SIZE(subs)
|
IWMMXT_OP_ENV_SIZE(subs)
|
||||||
IWMMXT_OP_SIZE(adds)
|
IWMMXT_OP_ENV_SIZE(adds)
|
||||||
|
|
||||||
IWMMXT_OP(avgb0)
|
IWMMXT_OP_ENV(avgb0)
|
||||||
IWMMXT_OP(avgb1)
|
IWMMXT_OP_ENV(avgb1)
|
||||||
IWMMXT_OP(avgw0)
|
IWMMXT_OP_ENV(avgw0)
|
||||||
IWMMXT_OP(avgw1)
|
IWMMXT_OP_ENV(avgw1)
|
||||||
|
|
||||||
IWMMXT_OP(msadb)
|
IWMMXT_OP(msadb)
|
||||||
|
|
||||||
IWMMXT_OP(packuw)
|
IWMMXT_OP_ENV(packuw)
|
||||||
IWMMXT_OP(packul)
|
IWMMXT_OP_ENV(packul)
|
||||||
IWMMXT_OP(packuq)
|
IWMMXT_OP_ENV(packuq)
|
||||||
IWMMXT_OP(packsw)
|
IWMMXT_OP_ENV(packsw)
|
||||||
IWMMXT_OP(packsl)
|
IWMMXT_OP_ENV(packsl)
|
||||||
IWMMXT_OP(packsq)
|
IWMMXT_OP_ENV(packsq)
|
||||||
|
|
||||||
static void gen_op_iwmmxt_set_mup(void)
|
static void gen_op_iwmmxt_set_mup(void)
|
||||||
{
|
{
|
||||||
@ -2007,13 +2014,13 @@ static int disas_iwmmxt_insn(CPUState *env, DisasContext *s, uint32_t insn)
|
|||||||
}
|
}
|
||||||
switch ((insn >> 22) & 3) {
|
switch ((insn >> 22) & 3) {
|
||||||
case 1:
|
case 1:
|
||||||
gen_helper_iwmmxt_srlw(cpu_M0, cpu_M0, tmp);
|
gen_helper_iwmmxt_srlw(cpu_M0, cpu_env, cpu_M0, tmp);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
gen_helper_iwmmxt_srll(cpu_M0, cpu_M0, tmp);
|
gen_helper_iwmmxt_srll(cpu_M0, cpu_env, cpu_M0, tmp);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
gen_helper_iwmmxt_srlq(cpu_M0, cpu_M0, tmp);
|
gen_helper_iwmmxt_srlq(cpu_M0, cpu_env, cpu_M0, tmp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
tcg_temp_free_i32(tmp);
|
tcg_temp_free_i32(tmp);
|
||||||
@ -2035,13 +2042,13 @@ static int disas_iwmmxt_insn(CPUState *env, DisasContext *s, uint32_t insn)
|
|||||||
}
|
}
|
||||||
switch ((insn >> 22) & 3) {
|
switch ((insn >> 22) & 3) {
|
||||||
case 1:
|
case 1:
|
||||||
gen_helper_iwmmxt_sraw(cpu_M0, cpu_M0, tmp);
|
gen_helper_iwmmxt_sraw(cpu_M0, cpu_env, cpu_M0, tmp);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
gen_helper_iwmmxt_sral(cpu_M0, cpu_M0, tmp);
|
gen_helper_iwmmxt_sral(cpu_M0, cpu_env, cpu_M0, tmp);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
gen_helper_iwmmxt_sraq(cpu_M0, cpu_M0, tmp);
|
gen_helper_iwmmxt_sraq(cpu_M0, cpu_env, cpu_M0, tmp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
tcg_temp_free_i32(tmp);
|
tcg_temp_free_i32(tmp);
|
||||||
@ -2063,13 +2070,13 @@ static int disas_iwmmxt_insn(CPUState *env, DisasContext *s, uint32_t insn)
|
|||||||
}
|
}
|
||||||
switch ((insn >> 22) & 3) {
|
switch ((insn >> 22) & 3) {
|
||||||
case 1:
|
case 1:
|
||||||
gen_helper_iwmmxt_sllw(cpu_M0, cpu_M0, tmp);
|
gen_helper_iwmmxt_sllw(cpu_M0, cpu_env, cpu_M0, tmp);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
gen_helper_iwmmxt_slll(cpu_M0, cpu_M0, tmp);
|
gen_helper_iwmmxt_slll(cpu_M0, cpu_env, cpu_M0, tmp);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
gen_helper_iwmmxt_sllq(cpu_M0, cpu_M0, tmp);
|
gen_helper_iwmmxt_sllq(cpu_M0, cpu_env, cpu_M0, tmp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
tcg_temp_free_i32(tmp);
|
tcg_temp_free_i32(tmp);
|
||||||
@ -2091,21 +2098,21 @@ static int disas_iwmmxt_insn(CPUState *env, DisasContext *s, uint32_t insn)
|
|||||||
tcg_temp_free_i32(tmp);
|
tcg_temp_free_i32(tmp);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
gen_helper_iwmmxt_rorw(cpu_M0, cpu_M0, tmp);
|
gen_helper_iwmmxt_rorw(cpu_M0, cpu_env, cpu_M0, tmp);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (gen_iwmmxt_shift(insn, 0x1f, tmp)) {
|
if (gen_iwmmxt_shift(insn, 0x1f, tmp)) {
|
||||||
tcg_temp_free_i32(tmp);
|
tcg_temp_free_i32(tmp);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
gen_helper_iwmmxt_rorl(cpu_M0, cpu_M0, tmp);
|
gen_helper_iwmmxt_rorl(cpu_M0, cpu_env, cpu_M0, tmp);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
if (gen_iwmmxt_shift(insn, 0x3f, tmp)) {
|
if (gen_iwmmxt_shift(insn, 0x3f, tmp)) {
|
||||||
tcg_temp_free_i32(tmp);
|
tcg_temp_free_i32(tmp);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
gen_helper_iwmmxt_rorq(cpu_M0, cpu_M0, tmp);
|
gen_helper_iwmmxt_rorq(cpu_M0, cpu_env, cpu_M0, tmp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
tcg_temp_free_i32(tmp);
|
tcg_temp_free_i32(tmp);
|
||||||
@ -2239,7 +2246,7 @@ static int disas_iwmmxt_insn(CPUState *env, DisasContext *s, uint32_t insn)
|
|||||||
rd0 = (insn >> 16) & 0xf;
|
rd0 = (insn >> 16) & 0xf;
|
||||||
gen_op_iwmmxt_movq_M0_wRn(rd0);
|
gen_op_iwmmxt_movq_M0_wRn(rd0);
|
||||||
tmp = tcg_const_i32(((insn >> 16) & 0xf0) | (insn & 0x0f));
|
tmp = tcg_const_i32(((insn >> 16) & 0xf0) | (insn & 0x0f));
|
||||||
gen_helper_iwmmxt_shufh(cpu_M0, cpu_M0, tmp);
|
gen_helper_iwmmxt_shufh(cpu_M0, cpu_env, cpu_M0, tmp);
|
||||||
tcg_temp_free(tmp);
|
tcg_temp_free(tmp);
|
||||||
gen_op_iwmmxt_movq_wRn_M0(wrd);
|
gen_op_iwmmxt_movq_wRn_M0(wrd);
|
||||||
gen_op_iwmmxt_set_mup();
|
gen_op_iwmmxt_set_mup();
|
||||||
|
Loading…
Reference in New Issue
Block a user