Revision 14ab1634

b/target-alpha/helper.h
17 17
DEF_HELPER_1(ctlz, i64, i64)
18 18
DEF_HELPER_1(cttz, i64, i64)
19 19

  
20
DEF_HELPER_2(mskbl, i64, i64, i64)
21
DEF_HELPER_2(mskwl, i64, i64, i64)
22
DEF_HELPER_2(mskll, i64, i64, i64)
23 20
DEF_HELPER_2(zap, i64, i64, i64)
24 21
DEF_HELPER_2(zapnot, i64, i64, i64)
25
DEF_HELPER_2(mskql, i64, i64, i64)
26 22
DEF_HELPER_2(mskwh, i64, i64, i64)
27 23
DEF_HELPER_2(inswh, i64, i64, i64)
28 24
DEF_HELPER_2(msklh, i64, i64, i64)
b/target-alpha/op_helper.c
175 175
    return op & ~mask;
176 176
}
177 177

  
178
uint64_t helper_mskbl(uint64_t val, uint64_t mask)
179
{
180
    return byte_zap(val, 0x01 << (mask & 7));
181
}
182

  
183
uint64_t helper_mskwl(uint64_t val, uint64_t mask)
184
{
185
    return byte_zap(val, 0x03 << (mask & 7));
186
}
187

  
188
uint64_t helper_mskll(uint64_t val, uint64_t mask)
189
{
190
    return byte_zap(val, 0x0F << (mask & 7));
191
}
192

  
193 178
uint64_t helper_zap(uint64_t val, uint64_t mask)
194 179
{
195 180
    return byte_zap(val, mask);
......
200 185
    return byte_zap(val, ~mask);
201 186
}
202 187

  
203
uint64_t helper_mskql(uint64_t val, uint64_t mask)
204
{
205
    return byte_zap(val, 0xFF << (mask & 7));
206
}
207

  
208 188
uint64_t helper_mskwh(uint64_t val, uint64_t mask)
209 189
{
210 190
    return byte_zap(val, (0x03 << (mask & 7)) >> 8);
b/target-alpha/translate.c
655 655
    }
656 656
}
657 657

  
658
/* MSKBL, MSKWL, MSKLL, MSKQL */
659
static inline void gen_msk_l(int ra, int rb, int rc, int islit,
660
                             uint8_t lit, uint8_t byte_mask)
661
{
662
    if (unlikely(rc == 31))
663
        return;
664
    else if (unlikely(ra == 31))
665
        tcg_gen_movi_i64(cpu_ir[rc], 0);
666
    else if (islit) {
667
        gen_zapnoti (cpu_ir[rc], cpu_ir[ra], ~(byte_mask << (lit & 7)));
668
    } else {
669
        TCGv shift = tcg_temp_new();
670
        TCGv mask = tcg_temp_new();
671

  
672
        tcg_gen_andi_i64(shift, cpu_ir[rb], 7);
673
        tcg_gen_shli_i64(shift, shift, 3);
674
        tcg_gen_movi_i64(mask, zapnot_mask (byte_mask));
675
        tcg_gen_shl_i64(mask, mask, shift);
676

  
677
        tcg_gen_andc_i64(cpu_ir[rc], cpu_ir[ra], mask);
678

  
679
        tcg_temp_free(mask);
680
        tcg_temp_free(shift);
681
    }
682
}
683

  
658 684
/* Code to call arith3 helpers */
659 685
#define ARITH3(name)                                                  \
660 686
static inline void glue(gen_, name)(int ra, int rb, int rc, int islit,\
......
686 712
ARITH3(sublv)
687 713
ARITH3(addqv)
688 714
ARITH3(subqv)
689
ARITH3(mskbl)
690
ARITH3(mskwl)
691
ARITH3(mskll)
692
ARITH3(mskql)
693 715
ARITH3(mskwh)
694 716
ARITH3(inswh)
695 717
ARITH3(msklh)
......
1314 1336
        switch (fn7) {
1315 1337
        case 0x02:
1316 1338
            /* MSKBL */
1317
            gen_mskbl(ra, rb, rc, islit, lit);
1339
            gen_msk_l(ra, rb, rc, islit, lit, 0x01);
1318 1340
            break;
1319 1341
        case 0x06:
1320 1342
            /* EXTBL */
......
1326 1348
            break;
1327 1349
        case 0x12:
1328 1350
            /* MSKWL */
1329
            gen_mskwl(ra, rb, rc, islit, lit);
1351
            gen_msk_l(ra, rb, rc, islit, lit, 0x03);
1330 1352
            break;
1331 1353
        case 0x16:
1332 1354
            /* EXTWL */
......
1338 1360
            break;
1339 1361
        case 0x22:
1340 1362
            /* MSKLL */
1341
            gen_mskll(ra, rb, rc, islit, lit);
1363
            gen_msk_l(ra, rb, rc, islit, lit, 0x0f);
1342 1364
            break;
1343 1365
        case 0x26:
1344 1366
            /* EXTLL */
......
1358 1380
            break;
1359 1381
        case 0x32:
1360 1382
            /* MSKQL */
1361
            gen_mskql(ra, rb, rc, islit, lit);
1383
            gen_msk_l(ra, rb, rc, islit, lit, 0xff);
1362 1384
            break;
1363 1385
        case 0x34:
1364 1386
            /* SRL */

Also available in: Unified diff