Revision 733fef0e tcg/x86_64/tcg-target.c

b/tcg/x86_64/tcg-target.c
382 382
    if (val == (int8_t)val) {
383 383
        tcg_out_modrm(s, 0x83, c, r0);
384 384
        tcg_out8(s, val);
385
    } else if (c == ARITH_AND && val == 0xffu) {
386
        /* movzbl */
387
        tcg_out_modrm(s, 0xb6 | P_EXT | P_REXB, r0, r0);
388
    } else if (c == ARITH_AND && val == 0xffffu) {
389
        /* movzwl */
390
        tcg_out_modrm(s, 0xb7 | P_EXT, r0, r0);
385 391
    } else {
386 392
        tcg_out_modrm(s, 0x81, c, r0);
387 393
        tcg_out32(s, val);
......
393 399
    if (val == (int8_t)val) {
394 400
        tcg_out_modrm(s, 0x83 | P_REXW, c, r0);
395 401
        tcg_out8(s, val);
402
    } else if (c == ARITH_AND && val == 0xffu) {
403
        /* movzbl */
404
        tcg_out_modrm(s, 0xb6 | P_EXT | P_REXW, r0, r0);
405
    } else if (c == ARITH_AND && val == 0xffffu) {
406
        /* movzwl */
407
        tcg_out_modrm(s, 0xb7 | P_EXT | P_REXW, r0, r0);
408
    } else if (c == ARITH_AND && val == 0xffffffffu) {
409
        /* 32-bit mov zero extends */
410
        tcg_out_modrm(s, 0x8b, r0, r0);
396 411
    } else if (val == (int32_t)val) {
397 412
        tcg_out_modrm(s, 0x81 | P_REXW, c, r0);
398 413
        tcg_out32(s, val);

Also available in: Unified diff