Revision d9bdab86 target-sparc/op.c

b/target-sparc/op.c
195 195
    env->y = res >> 32;
196 196
}
197 197

  
198
void OPPROTO op_mulscc_T1_T0(void)
199
{
200
    unsigned int b1, N, V, b2;
201
    target_ulong src1;
202

  
203
    N = FLAG_SET(PSR_NEG);
204
    V = FLAG_SET(PSR_OVF);
205
    b1 = N ^ V;
206
    b2 = T0 & 1;
207
    T0 = (b1 << 31) | (T0 >> 1);
208
    if (!(env->y & 1))
209
        T1 = 0;
210
    /* do addition and update flags */
211
    src1 = T0;
212
    T0 += T1;
213
    env->psr = 0;
214
    if (!T0)
215
        env->psr |= PSR_ZERO;
216
    if ((int32_t) T0 < 0)
217
        env->psr |= PSR_NEG;
218
    if (T0 < src1)
219
        env->psr |= PSR_CARRY;
220
    if (((src1 ^ T1 ^ -1) & (src1 ^ T0)) & (1 << 31))
221
        env->psr |= PSR_OVF;
222
    env->y = (b2 << 31) | (env->y >> 1);
223
    FORCE_RET();
224
}
225

  
226 198
void OPPROTO op_udiv_T1_T0(void)
227 199
{
228 200
    uint64_t x0;

Also available in: Unified diff