|
From: | Paolo Bonzini |
Subject: | [Lightning] Re: Still problems. |
Date: | Tue, 17 Jun 2008 15:25:31 +0200 |
User-agent: | Thunderbird 2.0.0.14 (Macintosh/20080421) |
Here is the relevant macro. Both references to RD use the same masking#define IMULQir(IM, RD) (_REXQrr(0, RD), _Os_Mrm_sL (0x69 ,_b11,_r8(RD),_r8(RD) ,IM ))
As Murphy's law goes, the only wrong ones were IMULQir and IMULQirr--checked against as+objdump with the following assembly source code (stuff after # is a comment):
movq %r10, %rdx #define MOVQrr(RS, RD) (_REXQrr(RS, RD) testq %r10, %rdx #define TESTQrr(RS, RD) (_REXQrr(RS, RD) cmpxchgq %r10, %rdx #define CMPXCHGQrr(RS, RD) (_REXQrr(RS, RD) xaddq %r10, %rdx #define XADDQrr(RS, RD) (_REXQrr(RS, RD) xchgq %r10, %rdx #define XCHGQrr(RS, RD) (_REXQrr(RS, RD)
imulq %r10, %rdx #define IMULQrr(RS, RD) (_REXQrr(RD, RS) imulq $10, %r10, %rdx #define IMULQirr(IM,RS,RD) (_REXQrr(RS, RD) <<< WRONG! cmovbq %r10, %rdx #define CMOVQrr(CC,RS,RD) (_REXQrr(RD, RS) bsfq %r10, %rdx #define BSFQrr(RS, RD) (_REXQrr(RD, RS) bsrq %r10, %rdx #define BSRQrr(RS, RD) (_REXQrr(RD, RS) movsbq %r10b, %rdx #define MOVSBQrr(RS, RD) (_REXQrr(RD, RS) movzbq %r10b, %rdx #define MOVZBQrr(RS, RD) (_REXQrr(RD, RS) movswq %r10w, %rdx #define MOVSWQrr(RS, RD) (_REXQrr(RD, RS) movzwq %r10w, %rdx #define MOVZWQrr(RS, RD) (_REXQrr(RD, RS) movslq %r10d, %rdx #define MOVSLQrr(RS, RD) _m64only((_REXQrr(RD, RS)
Fix committed & pushed. Paolo
[Prev in Thread] | Current Thread | [Next in Thread] |