Revision e1ef36c4
b/target-sparc/op_helper.c | ||
---|---|---|
3396 | 3396 |
{ |
3397 | 3397 |
unsigned int i; |
3398 | 3398 |
target_ulong val = 0; |
3399 |
CPU_DoubleU u; |
|
3399 | 3400 |
|
3400 | 3401 |
helper_check_align(addr, 3); |
3401 | 3402 |
addr = asi_address_mask(env, asi, addr); |
... | ... | |
3440 | 3441 |
switch(size) { |
3441 | 3442 |
default: |
3442 | 3443 |
case 4: |
3443 |
val = *((uint32_t *)&env->fpr[rd]);
|
|
3444 |
helper_st_asi(addr, *(uint32_t *)&env->fpr[rd], asi, size);
|
|
3444 | 3445 |
break; |
3445 | 3446 |
case 8: |
3446 |
val = *((int64_t *)&DT0); |
|
3447 |
u.l.upper = *(uint32_t *)&env->fpr[rd++]; |
|
3448 |
u.l.lower = *(uint32_t *)&env->fpr[rd++]; |
|
3449 |
helper_st_asi(addr, u.ll, asi, size); |
|
3447 | 3450 |
break; |
3448 | 3451 |
case 16: |
3449 |
// XXX |
|
3452 |
u.l.upper = *(uint32_t *)&env->fpr[rd++]; |
|
3453 |
u.l.lower = *(uint32_t *)&env->fpr[rd++]; |
|
3454 |
helper_st_asi(addr, u.ll, asi, 8); |
|
3455 |
u.l.upper = *(uint32_t *)&env->fpr[rd++]; |
|
3456 |
u.l.lower = *(uint32_t *)&env->fpr[rd++]; |
|
3457 |
helper_st_asi(addr + 8, u.ll, asi, 8); |
|
3450 | 3458 |
break; |
3451 | 3459 |
} |
3452 |
helper_st_asi(addr, val, asi, size); |
|
3453 | 3460 |
} |
3454 | 3461 |
|
3455 | 3462 |
target_ulong helper_cas_asi(target_ulong addr, target_ulong val1, |
b/target-sparc/translate.c | ||
---|---|---|
4742 | 4742 |
r_const = tcg_const_i32(7); |
4743 | 4743 |
gen_helper_check_align(cpu_addr, r_const); |
4744 | 4744 |
tcg_temp_free_i32(r_const); |
4745 |
gen_op_load_fpr_QT0(QFPREG(rd)); |
|
4746 | 4745 |
gen_stf_asi(cpu_addr, insn, 16, QFPREG(rd)); |
4747 | 4746 |
} |
4748 | 4747 |
break; |
4749 | 4748 |
case 0x37: /* V9 stdfa */ |
4750 |
gen_op_load_fpr_DT0(DFPREG(rd)); |
|
4751 | 4749 |
gen_stf_asi(cpu_addr, insn, 8, DFPREG(rd)); |
4752 | 4750 |
break; |
4753 | 4751 |
case 0x3c: /* V9 casa */ |
Also available in: Unified diff