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