Revision 3391c818 target-sparc/translate.c
b/target-sparc/translate.c | ||
---|---|---|
427 | 427 |
} |
428 | 428 |
} |
429 | 429 |
|
430 |
static inline void gen_ldf_asi(int insn, int size) |
|
431 |
{ |
|
432 |
int asi, offset, rd; |
|
433 |
|
|
434 |
rd = GET_FIELD(insn, 2, 6); |
|
435 |
if (IS_IMM) { |
|
436 |
offset = GET_FIELD(insn, 25, 31); |
|
437 |
gen_op_ldf_asi_reg(offset, size, rd); |
|
438 |
} else { |
|
439 |
asi = GET_FIELD(insn, 19, 26); |
|
440 |
gen_op_ldf_asi(asi, size, rd); |
|
441 |
} |
|
442 |
} |
|
443 |
|
|
444 |
static inline void gen_stf_asi(int insn, int size) |
|
445 |
{ |
|
446 |
int asi, offset, rd; |
|
447 |
|
|
448 |
rd = GET_FIELD(insn, 2, 6); |
|
449 |
if (IS_IMM) { |
|
450 |
offset = GET_FIELD(insn, 25, 31); |
|
451 |
gen_op_stf_asi_reg(offset, size, rd); |
|
452 |
} else { |
|
453 |
asi = GET_FIELD(insn, 19, 26); |
|
454 |
gen_op_stf_asi(asi, size, rd); |
|
455 |
} |
|
456 |
} |
|
457 |
|
|
430 | 458 |
static inline void gen_swap_asi(int insn) |
431 | 459 |
{ |
432 | 460 |
int asi, offset; |
... | ... | |
3069 | 3097 |
#ifdef CONFIG_USER_ONLY |
3070 | 3098 |
gen_op_check_align_T0_3(); |
3071 | 3099 |
#endif |
3072 |
gen_ld_asi(insn, 8, 0); // XXX
|
|
3100 |
gen_ldf_asi(insn, 4);
|
|
3073 | 3101 |
goto skip_move; |
3074 | 3102 |
case 0x33: /* V9 lddfa */ |
3075 |
gen_op_check_align_T0_7();
|
|
3076 |
gen_ld_asi(insn, 8, 0); // XXX
|
|
3103 |
gen_op_check_align_T0_3();
|
|
3104 |
gen_ldf_asi(insn, 8);
|
|
3077 | 3105 |
goto skip_move; |
3078 | 3106 |
case 0x3d: /* V9 prefetcha, no effect */ |
3079 | 3107 |
goto skip_move; |
... | ... | |
3245 | 3273 |
#ifdef CONFIG_USER_ONLY |
3246 | 3274 |
gen_op_check_align_T0_3(); |
3247 | 3275 |
#endif |
3248 |
gen_st_asi(insn, 0); // XXX |
|
3276 |
gen_op_load_fpr_FT0(rd); |
|
3277 |
gen_stf_asi(insn, 4); |
|
3249 | 3278 |
break; |
3250 | 3279 |
case 0x37: /* V9 stdfa */ |
3251 |
gen_op_check_align_T0_7(); |
|
3252 |
gen_st_asi(insn, 0); // XXX |
|
3280 |
gen_op_check_align_T0_3(); |
|
3281 |
gen_op_load_fpr_DT0(DFPREG(rd)); |
|
3282 |
gen_stf_asi(insn, 8); |
|
3253 | 3283 |
break; |
3254 | 3284 |
case 0x3c: /* V9 casa */ |
3255 | 3285 |
#ifdef CONFIG_USER_ONLY |
Also available in: Unified diff