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