Revision 4183f36d

b/target-sparc/op_helper.c
3331 3331
void helper_ldf_asi(target_ulong addr, int asi, int size, int rd)
3332 3332
{
3333 3333
    unsigned int i;
3334
    target_ulong val;
3334
    CPU_DoubleU u;
3335 3335

  
3336 3336
    helper_check_align(addr, 3);
3337 3337
    addr = asi_address_mask(env, asi, addr);
......
3371 3371
        break;
3372 3372
    }
3373 3373

  
3374
    val = helper_ld_asi(addr, asi, size, 0);
3375 3374
    switch(size) {
3376 3375
    default:
3377 3376
    case 4:
3378
        *((uint32_t *)&env->fpr[rd]) = val;
3377
        *((uint32_t *)&env->fpr[rd]) = helper_ld_asi(addr, asi, size, 0);
3379 3378
        break;
3380 3379
    case 8:
3381
        *((int64_t *)&DT0) = val;
3380
        u.ll = helper_ld_asi(addr, asi, size, 0);
3381
        *((uint32_t *)&env->fpr[rd++]) = u.l.upper;
3382
        *((uint32_t *)&env->fpr[rd++]) = u.l.lower;
3382 3383
        break;
3383 3384
    case 16:
3384
        // XXX
3385
        u.ll = helper_ld_asi(addr, asi, 8, 0);
3386
        *((uint32_t *)&env->fpr[rd++]) = u.l.upper;
3387
        *((uint32_t *)&env->fpr[rd++]) = u.l.lower;
3388
        u.ll = helper_ld_asi(addr + 8, asi, 8, 0);
3389
        *((uint32_t *)&env->fpr[rd++]) = u.l.upper;
3390
        *((uint32_t *)&env->fpr[rd++]) = u.l.lower;
3385 3391
        break;
3386 3392
    }
3387 3393
}

Also available in: Unified diff