mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
ARM TCG conversion 11/16.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4148 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
+4
-1
@@ -2167,6 +2167,10 @@ uint32_t HELPER(sel_flags)(uint32_t flags, uint32_t a, uint32_t b)
|
||||
return (a & mask) | (b & ~mask);
|
||||
}
|
||||
|
||||
uint32_t HELPER(logicq_cc)(uint64_t val)
|
||||
{
|
||||
return (val >> 32) | (val != 0);
|
||||
}
|
||||
|
||||
/* VFP support. We follow the convention used for VFP instrunctions:
|
||||
Single precition routines have a "s" suffix, double precision a
|
||||
@@ -2529,4 +2533,3 @@ uint32_t HELPER(rsqrte_u32)(uint32_t a, CPUState *env)
|
||||
tmp = float32_scalbn(tmp, 31, s);
|
||||
return float32_to_int32(tmp, s);
|
||||
}
|
||||
|
||||
|
||||
@@ -109,6 +109,8 @@ DEF_HELPER_1_2(usat16, uint32_t, (uint32_t, uint32_t))
|
||||
|
||||
DEF_HELPER_1_2(usad8, uint32_t, (uint32_t, uint32_t))
|
||||
|
||||
DEF_HELPER_1_1(logicq_cc, uint32_t, (uint64_t))
|
||||
|
||||
DEF_HELPER_1_3(sel_flags, uint32_t, (uint32_t, uint32_t, uint32_t))
|
||||
DEF_HELPER_0_1(exception, void, (uint32_t))
|
||||
DEF_HELPER_0_0(wfi, void, (void))
|
||||
|
||||
@@ -80,51 +80,6 @@ OPSUB(sub, sbc, T0, T0, T1)
|
||||
|
||||
OPSUB(rsb, rsc, T0, T1, T0)
|
||||
|
||||
void OPPROTO op_addq_T0_T1(void)
|
||||
{
|
||||
uint64_t res;
|
||||
res = ((uint64_t)T1 << 32) | T0;
|
||||
res += ((uint64_t)(env->regs[PARAM2]) << 32) | (env->regs[PARAM1]);
|
||||
T1 = res >> 32;
|
||||
T0 = res;
|
||||
}
|
||||
|
||||
void OPPROTO op_addq_lo_T0_T1(void)
|
||||
{
|
||||
uint64_t res;
|
||||
res = ((uint64_t)T1 << 32) | T0;
|
||||
res += (uint64_t)(env->regs[PARAM1]);
|
||||
T1 = res >> 32;
|
||||
T0 = res;
|
||||
}
|
||||
|
||||
/* Dual 16-bit accumulate. */
|
||||
void OPPROTO op_addq_T0_T1_dual(void)
|
||||
{
|
||||
uint64_t res;
|
||||
res = ((uint64_t)(env->regs[PARAM2]) << 32) | (env->regs[PARAM1]);
|
||||
res += (int32_t)T0;
|
||||
res += (int32_t)T1;
|
||||
env->regs[PARAM1] = (uint32_t)res;
|
||||
env->regs[PARAM2] = res >> 32;
|
||||
}
|
||||
|
||||
/* Dual 16-bit subtract accumulate. */
|
||||
void OPPROTO op_subq_T0_T1_dual(void)
|
||||
{
|
||||
uint64_t res;
|
||||
res = ((uint64_t)(env->regs[PARAM2]) << 32) | (env->regs[PARAM1]);
|
||||
res += (int32_t)T0;
|
||||
res -= (int32_t)T1;
|
||||
env->regs[PARAM1] = (uint32_t)res;
|
||||
env->regs[PARAM2] = res >> 32;
|
||||
}
|
||||
|
||||
void OPPROTO op_logicq_cc(void)
|
||||
{
|
||||
env->NZF = (T1 & 0x80000000) | ((T0 | T1) != 0);
|
||||
}
|
||||
|
||||
/* memory access */
|
||||
|
||||
#define MEMSUFFIX _raw
|
||||
|
||||
+290
-203
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user